猪如何将列连成单个字符串

时间:2014-01-28 00:16:55

标签: hadoop apache-pig

我有一列使用Pig加载的字符串:

A
B
C
D

如何将此列转换为单个字符串?

A,B,C,D

1 个答案:

答案 0 :(得分:0)

您必须先将GROUP ALL放入一个包中,然后使用UDF将包的内容连接在一起。像这样:

-- myudfs.py
-- #!/usr/bin/python
-- 
-- @outputSchema('concated: string')
-- def concat_bag(BAG):
--     return ','.join(BAG)
Register 'myudfs.py' using jython as myfuncs;

A = LOAD 'myfile.txt' AS (letter:chararray) ;

B = GROUP A ALL ;

C = FOREACH B GENERATE myfuncs.concat_bag(A.letter) AS all_letters ;

如果您的文件/架构包含多个列,您可能希望将要生成字符串的列投影出来。类似的东西:

A0 = LOAD 'myfile.txt' AS (letter:chararray, val:int, extra:chararray) ;
A = FOREACH A0 GENERATE letter ;

这样你就不会留下额外的列,这会减慢已经很昂贵的操作。