2014-12-04 72 views
0

我试图获得一个别名中所有用户的计数。每行包含用户的地图。猪拉丁语计算每个元组映射的键数

像这样: ([USER_NAME/454543#保罗基顺河]) ([USER_NAME/43433#Josiel的iPhone,USER_NAME/34343434#何塞的iPad,USER_NAME/3434645655#Josiel的])

当使用尺寸( )在整个别名上出现此错误: 错误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); 

想法是总结每个地图的计数输出以获得总数。

+0

对于谁发现这个职位寻找,当人们[错误1066:无法打开别名迭代器(http://stackoverflow.com/questions/34495085/error-1066-unable-to-open-iterator-for-alias-in-pig-generic-solution)这里是[通用解决方案](http://stackoverflow.com/a/34495086/983722 )。 – 2015-12-28 15:18:33

回答

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);