我想用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脚本未能分析:标量投影无效:数据:需要从关系中投影列才能将其用作标量
请帮忙
1条答案
按热度按时间mf98qq941#
这应该管用
[^ |]+$匹配最后一个管道字符右侧的所有内容。