Филтриране на данни в Apache Pig

Хей, опитвам се да филтрирам следния вход:

Id       Num
102369   100
623589   200
102369   300
103333   300
103333   100
...

Очакваното изходно отношение трябва да бъде намалено и да включва само всички ID - Num отношения за съществуващи отношения между Id и Num == 300:

Id     Num
102369 100
102369 300
103333 300
103333 100

Пробвал съм го така:

grouped = GROUP table BY Num;
filtered = FILTER grouped BY group == 300;
DUMP filtered;

Но това не работи. Можете ли да ми помогнете да разреша това?

Поздрави.


person Math Programmer    schedule 13.06.2017    source източник
comment
Ако очакваният ви изход трябва да включва само записи с num==300, защо имате два записа 102369 100 102369 300 в желания изход?   -  person VK_217    schedule 14.06.2017
comment
Всъщност искам като изход всички Id - Num отношения за идентификаторите, които са свързани с Num==300.   -  person Math Programmer    schedule 14.06.2017
comment
Вижте отговора по-долу   -  person VK_217    schedule 14.06.2017


Отговори (1)


Трябва да получите идентификатора на записа, който има Num==300 и след това да го използвате като филтър.

Ако приемем, че всичко num==300 води до 1 уникална стойност 102369

A = FILTER table BY (Num == 300);
B = LIMIT A 1; --This is to ensure you use only 1 value
C = FILTER table by B.$0;
DUMP C;

ИЛИ като използвате JOIN, ако имате няколко идентификатора за num==300

 A = FILTER table BY (Num == 300);
 B = JOIN table by Id,A BY A.$0;
 C = FOREACH B GENERATE B.$0,B.$1;
 DUMP C;
person VK_217    schedule 13.06.2017
comment
Добре, съжалявам, че адаптирах входните си данни в основната публикация. Следователно това вече не работи. Вашето решение работи само за първото съответстващо ID, но в моя случай има различни IDs, които съответстват на Num==300. - person Math Programmer; 14.06.2017
comment
@MathProgrammer В този случай трябва да използвате JOIN без да използвате ограничение 1. Join ще съответства на всички идентификатори. - person VK_217; 14.06.2017