2016-11-01 2 views
0

У меня есть несколько сумок, и я хочу вычислить попарные сходства между сумками.Apache Pig - inested FOREACH по тому же отношению

sequences = FOREACH raw GENERATE gen_bag(logs); 

Соотношение описывается следующим образом:

sequences: {t: (type: chararray, value:charray)} 

Сходство вычисляется с помощью UDF Python, который принимает два пакета в качестве аргументов. Я попытался сделать вложенный foreach по переменной последовательностей, но я не могу перебрать цикл по одному и тому же отношению дважды. Я также пытался определить последовательности дважды, но я не могу получить доступ к копии в foreach. Я также не знаю, как я могу создать структуру данных, которая позволяет мне делать такие вещи. Как я могу это сделать?

ответ

0

Похоже, что вы можете загрузить две копии исходных данных, выполнить кросс-продукт, а затем повторить вызов своего UDF на каждую пару. Что-то вроде:

sequences_A = FOREACH raw GENERATE gen_bag(logs); 
sequences_B = FOREACH raw GENERATE gen_bag(logs); 
all_pairs = CROSS sequences_A, sequences_B; 
FOREACH all_pairs GENERATE myudf(first_bag, second_bag);