在 Pig 中扁平化元组
Posted
技术标签:
【中文标题】在 Pig 中扁平化元组【英文标题】:Flattening tuples in Pig 【发布时间】:2014-06-27 22:51:41 【问题描述】:我有以下格式的数据:
(ID,描述)
1,xyz 是东西。 Abc bcd 等等。
1,xyz 是东西。 Abc xyz 等等。
2,abc 是什么东西。 Abc xyz 等等。
我需要这种格式的输出:
身份证,字
我试过这个:
A = LOAD './data.txt' USING PigStorage(',') as (id: int, desc:chararray);
B = FOREACH A GENERATE id, FLATTEN(STRSPLIT(desc, '[,?:;\s]'));
这会产生如下输出:
1, xyz, is, something, Abc, bcd, so, on
我想要的是:
1,xyz
1,是
1,某事
等等等等。
如何在 Pig 中执行此操作(无需编写 UDF)?
PS:也试过了:
B = FOREACH A GENERATE id, FLATTEN(datafu.pig.util.TransposeTupleToBag(STRSPLIT(desc, '[.&,?:;\s]')));
【问题讨论】:
【参考方案1】:你可以在 pig 中使用 Tokenize。请在下面找到答案。
这是输入文件
猫文件1
1,xyz 是什么东西
2,abc 是什么东西
A = 使用 PigStorage(',') 加载 'file1';
B = foreach A 生成 $0, FLATTEN(TOKENIZE($1));
转储 B
(1,xyz)
(1,是)
(1,某物)
(2,abc)
(2,是)
(2,某事)
【讨论】:
以上是关于在 Pig 中扁平化元组的主要内容,如果未能解决你的问题,请参考以下文章
Python:扁平化包含来自函数的另一个元组的元组的最简单方法