如何获取pig脚本中的最后一个元素

yrdbyhpb  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(376)

我想用pig脚本得到一行的最后一个元素。我不能使用$作为索引的最后一个元素是不固定的。我试过使用正则表达式,但不起作用。我试着用-1美元得到它,但它没有工作。我只张贴了一个样本,因为我的实际文件包含更多的pid的。
样品:

MSH|�~\&|LAB|LAB|HEATH|HEA-HEAL|20247||OU�R01|M1738000000001|P|2.3|||ER|ER|
PID|1|YXQ120185751001|YXQ120185751001||ELJKDP@#PDUB||19790615|F||| H LGGH VW��ZHVW FKHVWHU�SD�19380|||||||4002C340778A|000009561|ELJKDP@#PDUB19790615F

我想得到pid i的最后一个值;e ELJKDP@#PDUB19790615F 为此,我尝试了下面的代码,但它不工作。
代码1:

STOCK_A = LOAD '/user/rt/PARSED' USING PigStorage('|'); 
data = FILTER STOCK_A BY ($0 matches '.*PID.*'); 
MSH_DATA = FOREACH data GENERATE $2 AS id, $5 AS ame , $7 AS dob, $8 AS gender, $-1 AS rk;

代码2:

STOCK_A = LOAD '/user/rt/PARSED' USING PigStorage('|'); 
data = FILTER STOCK_A BY ($0 matches '.*PID.*'); 
MSH_DATA = FOREACH data GENERATE $2 AS id, $5 AS ame , $7 AS dob, $8 AS gender, REGEX_EXTRACT(data,'\\s*(\\w+)$',1) AS rk;

代码2错误:
error org.apache.pig.tools.grunt.grunt-error 1200:pig脚本未能分析:标量投影无效:数据:需要从关系中投影列才能将其用作标量
请帮忙

mf98qq94

mf98qq941#

这应该管用

REGEX_EXTRACT(data,'([^|]+$)',1) AS rk

[^ |]+$匹配最后一个管道字符右侧的所有内容。

相关问题