Pig脚本DISTINCT不过滤掉重复的行

时间:2018-08-03 21:32:09

标签: hadoop scripting apache-pig

在具有数百万条记录的表上如下运行猪脚本:

A = LOAD '/this/that..' USING PigStorage(',') AS (F1:chararray, F2:chararray...);
CleanedCol1 = FOREACH A GENERATE LOWER(TRIM(REPLACE(F1,'[^a-zA-Z0-9-]',''))) AS F1, '' as F2...;
CleanedCol2 = FOREACH A GENERATE...

Combined = UNION CleanedCol1, CleanedCol2
CombinedSorted = ORDER Combined by F1;
CombinedDistinct = DISTINCT CombinedSorted

STORE CombinedDistinct INTO 'this/that' USING PigStorage(',')

CleanedCols在已加载的各个列中的一些上运行LOWER(TRIM(REPLACE))函数,出于我的理智,我将其缩短。

尽管最后使用DISTINCT,但我留下了重复行,这些行不必要地延长了脚本的时间。我没有发现与DISTINCT有关的任何信息以及基于记录数的限制,因此我不确定为什么它不起作用。有人可以告诉我为什么我看到重复的东西吗?

1 个答案:

答案 0 :(得分:0)

事实证明,问题是Pig如何处理只有空格字符的列。在空列上运行trim时,它将显示null值的外观,但在distinct比较中将被区别对待。我通过在每一列上运行以下命令清除了值,并且解决了我的重复问题:

TableClean = FOREACH A GENERATE (Col1 matches '^[\\s]*$' ? null : Col1) AS Col1...