我是Apache Pig的新用戶,我有一個問題需要解決。Apache Pig - 如何獲得多個袋子之間匹配元素的數量?
我想用阿帕奇豬做一個小搜索引擎。這個想法很簡單:我有一個文件,它是多個文件的連接(每行一個文件)。下面是三個文件的例子:
1,word1 word4 word2 word1
2,word2 word6 word1 word5 word3
3,word1 word3 word4 word5
然後,我創建的每個文檔的單詞一袋,使用這些代碼行:
docs = LOAD '$documents' USING PigStorage(',') AS (id:int, line:chararray);
B = FOREACH docs GENERATE line;
C = FOREACH B GENERATE TOKENIZE(line) as gu;
然後,我刪除重複的條目上袋:
filtered = FOREACH C {
uniq = DISTINCT gu;
GENERATE uniq;
}
下面是此代碼的結果:
DUMP filtered;
({(word1), (word4), (word2)})
({(word2), (word6), (word1), (word5), (word3)})
({(word1), (word3), (word4), (word5)})
所以我有一個文件袋,就像我想要的。
現在,讓我們考慮用戶查詢的文件:
word2 word7 word5
我變換查詢詞的袋子:
query = LOAD '$query' AS (line_query:chararray);
bag_query = FOREACH query GENERATE TOKENIZE(line_query) AS quer;
DUMP bag_query;
下面是結果:
({(word2), (word7), (word5)})
現在,這是我的問題:我想獲得查詢和每個文檔之間的匹配數。有了這個例子,我想有這樣的輸出:
1
2
1
我試圖讓袋之間的聯接,但它沒有奏效。
請問您能幫我嗎?
謝謝。
我試過你的解決方案,它工作完美。謝謝 ! :) –