Hadoop 比较pig中行的逻辑

Hadoop 比较pig中行的逻辑,hadoop,apache-pig,Hadoop,Apache Pig,我需要以下场景的逻辑,需要使用Pig脚本实现。请任何人提供一些关于如何做到这一点的想法 输入包含一个列groupName,其中的某些数据与其他数据类似且未知。此数据需要替换为以前的记录数据 输入: id,groupName 123,casc0001 124,casc0002 125,sale0001 126,unknown 127,nave9876 128,casc0001 129,sale0002 130,others 131,casc0004 132,unknown

我需要以下场景的逻辑,需要使用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,其他需要替换为1290002。132,未知133,未知134,其他替换为131CAS0004

--编辑--

我在猪身上试过铅的功能。但它一次仅用于比较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,并且还原数设置为1,则解决方案可能更简单。
在这种情况下,您几乎可以提出这样的论点:像Oracle或Terra data这样的传统数据库可能更适合您的问题,因为您可以随时使用lead或lag函数来完成您需要的任务。

您尝试过什么吗?您正在寻找替换函数吗。