如何获取 Pig Script 中的最后一个元素

How to get the last element in Pig Script

我想使用 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 ([=11=] matches '.*PID.*'); 
MSH_DATA = FOREACH data GENERATE  AS id,  AS ame ,  AS dob,  AS gender, $-1 AS rk;

代码 2:

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

代码 2 错误:

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Pig script failed to parse: Invalid scalar projection: data : A column needs to be projected from a relation for it to be used as a scalar

请帮忙

这应该有效

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

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