如何检索Pig中的上一行值

时间:2016-11-30 13:26:27

标签: hadoop apache-pig cloudera bigdata

您好我正在使用 Pig 来移动 HBASE 中的值。我试图在条件执行,如果它是成功我将连接一个值,如果它失败我将连接上一行的值。 为此,我尝试下面的代码,但它没有工作,并抛出错误。

代码

STOCK_A = LOAD '/user/cloudera/pat.hl7' USING PigStorage('|');
data = FILTER STOCK_A BY ($0 matches '.*OBR.*' or $0  matches '.*OBX.*');
MSH_DATA = FOREACH data GENERATE ($0 == 'OBR' ? CONCAT('HL','OBR',(chararray)$1) : CONCAT('HL','OBR',(chararray)(data -1).$1)) AS Uid, $1 AS id, $5 AS result, $3 AS resultname;

错误

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 14, column 122>  mismatched input '.' expecting RIGHT_PAREN

我希望在其他行中复制连接值,直到我到达另一个 OBR 。请帮助。

2 个答案:

答案 0 :(得分:1)

您不能在Pig本身中引用先前的行,但您可以编写将接受所有行并执行所需行的聚合UDF。但请记住,您还需要指定并行度1,否则您的行将以块的形式分割

答案 1 :(得分:0)

我认为你可以Stitch,Over和lag来计算前一行的数据。虽然不确定效率。