StrSplit in Pig功能

时间:2014-07-27 13:26:27

标签: apache-pig

有人可以解释我在Pigscript

中获得以下输出

我的输入文件在

下面

A.TXT

aaa.kyl,data,data
bbb.kkk,data,data
cccccc.hj,data,data
qa.dff,data,data

我正在写这样的猪脚本

A = LOAD 'a.txt' USING PigStorage(',') AS(a1:chararray,a2:chararray,a3:chararray);
B = FOREACH A GENERATE FLATTEN(STRSPLIT(a1)),a2,a3;

我不知道如何继续这个.. 我需要像下面这样放。基本上我需要在第一个原子中的点符号之后的所有字符

(kyl,data,data)
(kkk,data,data)
(hj,data,data)
(dff,data,data)

有人可以给我这个代码吗

3 个答案:

答案 0 :(得分:8)

以下是您需要做的事情 -

这是猪解析例程中遇到点的一个转义问题,因为它被视为操作员,请参阅此链接以获取更多信息Dot Operator

您可以使用unicode转义序列代替点:\ u002E。但是,这也必须是斜线转义并放入一个带引号的字符串。

以下代码将为您完成工作,您可以根据自己的方便进行微调 -

A = LOAD 'a.txt' USING PigStorage(',') AS(a1:chararray,a2:chararray,a3:chararray);
B = FOREACH A GENERATE FLATTEN(STRSPLIT(a1,'\\u002E')) as (a1:chararray, a1of1:chararray),a2,a3;
C = FOREACH B GENERATE a1of1,a2,a3;

希望这有帮助。

答案 1 :(得分:3)

您可以通过以下方式尝试STRSPLIT(),

A = LOAD 'C:\\Users\\Ren\\Desktop\\file' USING PigStorage(',') AS(a1:chararray,a2:chararray,a3:chararray); 

B = foreach A generate SUBSTRING(a1,INDEXOF(a1,'.',0)+1,(int)SIZE(a1)),a2,a3;                                                                                 

答案 2 :(得分:0)

A = LOAD 'a.txt' USING PigStorage(',') AS(a1:chararray,a2:chararray,a3:chararray);

B = FOREACH A GENERATE FLATTEN(STRSPLIT(a1,'.')),a2,a3;

这将把1分成2个部分,分别在点之前和之后,你可以在点运算符之后选择。

C = foreach B generate $1,$2,$3;

其中 $ 1 在Dot运算符

之后