Я новый пользователь 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
Я пытался сделать JOIN между мешками, но это не сработало.
Не могли бы вы помочь мне, пожалуйста?
спасибо.
Я пробовал ваше решение, и оно отлично работало. Благодаря ! :) –