0
我想写一个UDF,它将一个元组作为输入并返回一个数据包作为输出。我对PIG很新。请帮忙。我有的例子是UPPER.java类的例子。返回一个数据库在PIG给出一个元组
UDF应该做什么的示例 输入是说< 8,9,1,8,9>输出应该是< {8,2} {9,2} {1,1}> 8出现2次,9次也是1次出现一次。
我想写一个UDF,它将一个元组作为输入并返回一个数据包作为输出。我对PIG很新。请帮忙。我有的例子是UPPER.java类的例子。返回一个数据库在PIG给出一个元组
UDF应该做什么的示例 输入是说< 8,9,1,8,9>输出应该是< {8,2} {9,2} {1,1}> 8出现2次,9次也是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)
ip_output_bag = foreach ip_out generate TOBAG($0,$1);
结果:
({(1),(1)})
({(8),(2)})
({(9),(2)})
更具体。你想让你的UDF用元组做什么? DataBag与它有什么关系? –
输入是<8,9,1,8,9>输出应该是<{8,2} {9,2} {1,1}> 8出现2次,9也是,1出现一次。所以这就像一个频率计数。我需要使用UDF来做到这一点 – user3011727
这是提出问题的重要信息。试着写你的代码,然后我们可以看看你有什么问题。 –