Pig Latin计算每个元组的地图中的键数

时间:2014-12-04 23:14:27

标签: apache-pig

我正在尝试计算别名中所有用户的数量。每行包含一个用户地图。

像这样: ([user_name / 454543 #Paul Kison]) ([user_name / 43433 #Josiel的iPhone,user_name / 34343434 #Jose的iPAD,user_name / 3434645655 #Josiel's])

在整个别名上使用size()时出现此错误: 错误1066:无法为别名user_count打开迭代器。后端错误:标量在输出中有多行。

users = LOAD 'hbase://group'
   USING org.apache.pig.backend.hadoop.hbase.HBaseStorage ('n:user_display_name*', '-limit 10')
   as(display_name);

user_count = FOREACH users GENERATE SIZE(users.display_name);

我们的想法是将每张地图的计数输出相加得到总数。

1 个答案:

答案 0 :(得分:1)

我必须显式地将display_name列的类型设置为map [],并更改使用列名作为传递给SIZE()的表达式。

users = LOAD 'hbase://group'
   USING org.apache.pig.backend.hadoop.hbase.HBaseStorage ('n:user_display_name*', '-limit 10')
   as(display_name:MAP[]);

user_count = FOREACH users GENERATE SIZE(display_name);

之后我总结了这样的结果:

users_group = GROUP user_count ALL;
total = FOREACH users_group GENERATE SUM(user_count);