有人可以解释我在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)
有人可以给我这个代码吗
答案 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运算符
之后