如何使用 apache pig 将一个包转换为多个包?
Posted
技术标签:
【中文标题】如何使用 apache pig 将一个包转换为多个包?【英文标题】:How to convert a bag into multiple bags using apache pig? 【发布时间】:2016-12-15 22:20:55 【问题描述】:我有一个包含两组数据的文件,如下所示:
1,abc,10,dss
2,efgh,as
1,abc,10,1234
2,efgh,as
1,abc,10,7899
2,efgh,as
以#1 开头的记录是一组,以#2 开头的记录是不同的一组。所以两者都有不同的结构。如何分离这两组记录?
【问题讨论】:
【参考方案1】:这是一种方法……
A = LOAD '/user/data/split.txt' as line:chararray;
B = FOREACH A GENERATE Flatten(TOKENIZE(line,' ')) ;
B1 = filter B by $0 matches '1.*';
B2 = filter B by $0 matches '2.*';
DUMP B1
DUMP B2
or
SPLIT B INTO B1 IF ($0 matches '1.*'), B2 IF ($0 matches '2.*');
【讨论】:
嗨,我收到以下错误:2016-12-16 10:32:17,936 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1025: 无效的字段投影。投影字段 [line] 不存在。我运行了以下代码:grunt> file2 = LOAD '/hls/hls_wi/training/twofile.csv' USING PigStorage(',') ; grunt> B = FOREACH file2 GENERATE Flatten(TOKENIZE(line,' ')) ; 您正在使用“USING PigStorage(',') ;”就地使用“as line:chararray;”和 TOKENIZE 并确认您的输入格式。【参考方案2】:使用新的更新版本的输入,这里是其他解决方案
A = LOAD '/user/data/split.txt' as line:chararray;
B1 = filter A by $0 matches '1.*';
B2 = filter A by $0 matches '2.*';
or
SPLIT A INTO B1 IF ($0 matches '1.*'), B2 IF ($0 matches '2.*');
【讨论】:
以上是关于如何使用 apache pig 将一个包转换为多个包?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 apache pig 将标题行加入多个文件中的详细行
数据正在转换为二进制格式,同时使用 Apache pig 将数据加载到 monet db