Как составить кортеж, какие кортежи находятся в сумке - PullRequest
0 голосов
/ 12 июля 2019

данные:

1   a   1
1   b   2
2   c   3
2   a   4

С помощью следующих команд:

record = LOAD 'test_in' AS (id:int, company:chararray, rank:chararray);
grp = GROUP record BY id;

Я получил GRP:

(1,{(b,2),(a,1),(d,1)})
(2,{(a,4),(c,3)})

и я хочу получить следующие результаты:

(1,b:2_a:1)
(2,a:4_c:3)

Следующий код возвращает ошибку:

newdata = FOREACH grp GENERATE group AS id,
      BagToString(CONCAT(record.$1, CONCAT(':', record.$2))) AS company;

информация об ошибке:

[main] ОШИБКА org.apache.pig.tools.grunt.Grunt - ОШИБКА 1200: Ожидается мешок кортежей: {()}, найденный тип данных: bytearray

1 Ответ

0 голосов
/ 12 июля 2019

Как насчет разделения фазы concat на две части?

A = LOAD 'input.txt' AS (id:int, company:chararray, rank:chararray);
B = GROUP A BY id;
C = FOREACH B {
    C2 = FOREACH A GENERATE CONCAT(CONCAT(company, ':'), rank);
    GENERATE group as id, C2;
}
D = FOREACH C GENERATE id, BagToString(C2);
STORE D into 'myfile';

Выход

(1,b:2_a:1)
(2,a:4_c:3)
...