如何在 Pig 中检索前一行的值
Posted
技术标签:
【中文标题】如何在 Pig 中检索前一行的值【英文标题】:How to retrieve previous row value in Pig 【发布时间】:2016-11-30 13:26:26 【问题描述】:您好,我正在使用 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。请帮忙。
【问题讨论】:
【参考方案1】:您不能在 Pig 本身中引用以前的行,但您可以编写一个聚合 UDF,它会接受所有行并执行所需的操作。但请记住,您还需要指定并行度 1,否则您的行将被分割成块
【讨论】:
我是猪拉丁语的初学者。你能分享我的例子,以便我可以write an aggregate UDF
.
实际上,您需要实现简单的 UDF(扩展 EvalFunc),它将在全部分组后获取所有数据。但请注意,如果您有太多数据,请考虑生成一些以按其分组的键。【参考方案2】:
我认为您可以通过 Stitch、Over 和 lag 计算上一行的数据。虽然不确定效率。
【讨论】:
以上是关于如何在 Pig 中检索前一行的值的主要内容,如果未能解决你的问题,请参考以下文章