gpt4 book ai didi

hadoop - 逻辑比较 pig 中的行

转载 作者:行者123 更新时间:2023-12-02 22:04:46 24 4
gpt4 key购买 nike

对于以下需要使用Pig脚本实现的方案,我需要逻辑。任何人都可以帮助提供一些有关如何执行此操作的想法。

输入包含一个groupName列,其中包含一些其他数据,例如未知数据。该数据需要替换为其先前的记录数据。

输入:

 id,groupName
123,casc0001
124,casc0002
125,sale0001
126,unknown
127,nave9876
128,casc0001
129,sale0002
130,others
131,casc0004
132,unknown
133,unknown
134,others
135,nave1234

输出:
123,casc0001
124,casc0002
125,sale0001
126,sale0001
127,nave9876
128,casc0001
129,sale0002
130,sale0002
131,casc0004
132,casc0004
133,casc0004
134,casc0004
135,nave1234

在上面的输入126中,未知值将替换为125,sale0001。 130,其他需要替换为129,sale0002。 132,未知133,未知134,其他要替换为131,casc0004。

- 编辑 -

我在Pig中尝试了导联功能。但是它一次仅用于比较n行。哪一个不能完全解决这个问题。

另一个逻辑正在起作用,但正在寻找优化的逻辑。
Cogroup for the same data set (like Dataset and Dataset_self)
-Filter Dataset.id=Dataset_self.id or Dataset_self.groupname='others' or Dataset_self.groupname='unknown'
-Generate IdDiff like (Dataset_self.id-Dataset.id), CASE when id=id then ( id, group) else (id_self,group)
-Foreach (group id){
ordered = order by id,diff,group;
limited = ordered limit 1;
generate limited ;
}

最佳答案

在像hadoop这样的分布式系统上,这将是一个复杂的问题,尤其是您的文件将在节点之间分割。在您的情况下,如果126恰好是新拆分中的第一条记录,该怎么办。然后,您将需要跟踪先前在不同节点上最有可能发生的文件拆分。可以说您想出了一个MapReduce程序来执行此操作,很可能这是一种极其缓慢且效率低下的方法。如果您在输入格式的splittable属性为false且reducer的数量设置为1的单节点系统中,则解决方案可能会更简单。
在那种情况下,您几乎可以说一个论点,因为像Oracle或Terra数据之类的传统数据库可能更适合您的问题,因为您具有随时可用的超前或滞后函数,这些函数可用来完全满足您的需求。

关于hadoop - 逻辑比较 pig 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30373227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com