0
目的:上的使用字符串函數扁平chararray數據上扁平chararray數據使用字符串函數
輸入:test.txt的
file_id file_name created_time accesssed_by
1 a1 1 user1
1 a2 2 user1
2 b1 3 user1
3 c1 4 user1
豬腳本:
A = LOAD 'usertest.txt' USING PigStorage('\t') AS (file_id:long, file_name:chararray, created_time:long,accessed_by:chararray);
B = GROUP A BY file_id;
C = FOREACH B {
sorted = ORDER A BY created_time DESC;
user = A.accessed_by;
uniq_user = DISTINCT user;
last = LIMIT sorted 1;
GENERATE UPPER(FLATTEN(last.file_name)) AS file_name, COUNT(uniq_user) AS access_count;
};
試圖使用任何字符串操作在扁平chararray數據類型之上的函數導致下面的ERROR。
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 185, column 22> mismatched input 'FLATTEN' expecting RIGHT_PAREN
不使用FLATTEN頂部的字符串操作函數將導致所需的數據。
(a2,1)
(b1,1)
(c1,1)
目的是使用一些字符串處理函數,而不打算對數據進行另一次迭代之前堅持的FILE_NAME轉換爲所需的格式。
如下圖所示,我們可以實現我們的目標,我們能否避免這種情況,並且先做同樣的事情。
D = FOREACH C GENERATE UPPER(file_name) AS file_name, access_count;
輸出:
(A2,1)
(B1,1)
(C1,1)
更新:
基於@Balduz投入使用BagToString eval函數轉換袋爲String,並能夠達到我們的目的。
C = FOREACH B {
sorted = ORDER A BY created_time DESC;
user = A.accessed_by;
uniq_user = DISTINCT user;
last = LIMIT sorted 1;
GENERATE UPPER(BagToString(last.file_name)) AS file_name, COUNT(uniq_user) AS access_count;
};
感謝@Balduz,根據您輸入的:使用BagToString eval函數轉換袋爲String,並能夠實現我們的目的。 –