Pig 函数中的 StrSplit
Posted
技术标签:
【中文标题】Pig 函数中的 StrSplit【英文标题】:StrSplit in Pig functions 【发布时间】:2014-07-27 13:26:27 【问题描述】:有人可以解释一下我如何在 Pigscript 中获得以下输出
我的输入文件在下面
一个.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)
谁能给我这个代码
【问题讨论】:
【参考方案1】:这是你需要做的-
这是猪解析例程中遇到点时的转义问题,因为它被视为运算符,请参阅此链接以获取更多信息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;
希望这会有所帮助。
【讨论】:
很好的解释.. 我们是否也需要对管道符号和逗号应用这种 unicode 转义序列。 No not for pipe and comma check the pig documentation【参考方案2】:您可以通过以下方式尝试使用 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;
【讨论】:
【参考方案3】:A = LOAD 'a.txt' USING PigStorage(',') AS(a1:chararray,a2:chararray,a3:chararray);
B = FOREACH A GENERATE FLATTEN(STRSPLIT(a1,'.')),a2,a3;
这会将a1分成两部分,即点前和点后,您可以从中选择点后运算符。
C = foreach B generate $1,$2,$3;
$1 在点运算符之后
【讨论】:
以上是关于Pig 函数中的 StrSplit的主要内容,如果未能解决你的问题,请参考以下文章