如何在 Pig 中检索上一行值
How to retrieve previous row value in Pig
您好,我正在使用 Pig 移动 HBASE 中的值。我试图在条件下执行,如果成功我将连接一个值,如果失败我将连接前一行的值。
为此,我尝试了下面的代码,但它不起作用并抛出错误。
代码:
STOCK_A = LOAD '/user/cloudera/pat.hl7' USING PigStorage('|');
data = FILTER STOCK_A BY ([=10=] matches '.*OBR.*' or [=10=] matches '.*OBX.*');
MSH_DATA = FOREACH data GENERATE ([=10=] == 'OBR' ? CONCAT('HL','OBR',(chararray)) : CONCAT('HL','OBR',(chararray)(data -1).)) AS Uid, AS id, AS result, AS resultname;
错误:
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 14, column 122> mismatched input '.' expecting RIGHT_PAREN
我希望在其他行中复制该串联值,直到我到达另一个 OBR。请帮助。
您无法在 Pig 本身中引用之前的行,但您可以编写一个聚合 UDF 来接受所有行并执行所需的操作。但请记住,您还需要指定并行度 1,否则您的行将分成块
我认为您可以通过 Stitch、Over 和 lag 来计算上一行的数据。虽然不确定效率。
您好,我正在使用 Pig 移动 HBASE 中的值。我试图在条件下执行,如果成功我将连接一个值,如果失败我将连接前一行的值。 为此,我尝试了下面的代码,但它不起作用并抛出错误。
代码:
STOCK_A = LOAD '/user/cloudera/pat.hl7' USING PigStorage('|');
data = FILTER STOCK_A BY ([=10=] matches '.*OBR.*' or [=10=] matches '.*OBX.*');
MSH_DATA = FOREACH data GENERATE ([=10=] == 'OBR' ? CONCAT('HL','OBR',(chararray)) : CONCAT('HL','OBR',(chararray)(data -1).)) AS Uid, AS id, AS result, AS resultname;
错误:
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 14, column 122> mismatched input '.' expecting RIGHT_PAREN
我希望在其他行中复制该串联值,直到我到达另一个 OBR。请帮助。
您无法在 Pig 本身中引用之前的行,但您可以编写一个聚合 UDF 来接受所有行并执行所需的操作。但请记住,您还需要指定并行度 1,否则您的行将分成块
我认为您可以通过 Stitch、Over 和 lag 来计算上一行的数据。虽然不确定效率。