我正在尝试编写一个UDF,它将一个元组作为输入并返回一个数据条作为输出。我对PIG很新。请帮忙。我的例子是UPPER.java类示例。
UDF应该做什么的例子 输入是< 8,9,1,8,9>输出应为< {8,2} {9,2} {1,1}> 8次出现2次,9次出现,1次出现。
答案 0 :(得分:0)
我找到了解决方案。
<小时/> 第1步:加载输入文件
input_data= load '/idn/home/ksing143/tuple_related_data/tuple_frequency.txt' USING PigStorage() AS ip_tuple:tuple(a:int, b:int, c:int, d:int, e:int);
结果:
((8,9,1,8,9))
ip_flattened = foreach input_data generate FLATTEN($0);
ip_tobag = foreach ip_flattened generate TOBAG(ip_tuple::a,ip_tuple::b,ip_tuple::c,ip_tuple::d,ip_tuple::e);
结果:
({(8),(9),(1),(8),(9)})
ip_tobag_flattened = foreach ip_tobag generate FLATTEN($0);
结果:
(8)
(9)
(1)
(8)
(9)
ip_grouped = group ip_tobag_flattened BY $0;
ip_out = foreach ip_grouped generate group, COUNT($1);
结果:
(1,1)
(8,2)
(9,2)
<小时/> 第6步:按照包的形式转换输出TOBAG。
ip_output_bag = foreach ip_out generate TOBAG($0,$1);
结果:
({(1),(1)})
({(8),(2)})
({(9),(2)})