2014-12-04 35 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);