In Pig 0.10 SUM(INPUT.col2)不起作用,因爲它將INPUT.col2作爲一袋布爾值處理,而bag不是原始類型,所以無法轉換爲布爾值。另一件事是,如果col2的輸入數據被指定爲布爾值,則輸入的轉儲沒有col2的任何值,但將其視爲chararray可以很好地工作。
豬非常適合這種類型的任務,因爲它具有通過嵌套在FOREACH中的操作符與單個組合作的手段。這裏是一個工作的解決方案:
inpt = load '....' as (col1 : chararray, col2 : chararray);
grp = group inpt by col1; -- creates bags for each value in col1
result = foreach grp {
total = COUNT(inpt);
t = filter inpt by col2 == 'T'; --create a bag which contains only T values
generate flatten(group) as col1, total as TOTAL_ROWS_IN_INPUT_TABLE, 100*(double)COUNT(t)/(double)total as PERCENTAGE_TRUE_IN_INPUT_TABLE;
};
dump result;
輸出:
(aaa,3,33.333333333333336)
(bbb,2,100.0)
(ccc,2,0.0)
我第一次拿到了總計數,然後過濾爲真實的,然後通過COL1合併。但我不確定這是否是正確的做法。 –