Цель: Использование функций Строковые на сплющенные данных 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
Pig Сценарий:
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 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)
Цель заключается в использовании некоторых функций работы со строками, чтобы преобразовать имя_файла в нужный формат перед тем сохраняющиеся не заходя на другой итерации данных.
Идя дальше, мы можем достичь нашей цели, можем ли мы избежать этого и сделать то же самое раньше.
D = FOREACH C GENERATE UPPER(file_name) AS file_name, access_count;
Выход:
(A2,1)
(B1,1)
(C1,1)
Update:
на основе входов @Balduz конвертированы мешок в строку с помощью функции Eval BagToString и был в состоянии достичь нашей цели.
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 и был в состоянии достигнуть нашего задача. –