在具有数百万条记录的表上如下运行猪脚本:
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
有关的任何信息以及基于记录数的限制,因此我不确定为什么它不起作用。有人可以告诉我为什么我看到重复的东西吗?
答案 0 :(得分:0)
事实证明,问题是Pig如何处理只有空格字符的列。在空列上运行trim
时,它将显示null
值的外观,但在distinct
比较中将被区别对待。我通过在每一列上运行以下命令清除了值,并且解决了我的重复问题:
TableClean = FOREACH A GENERATE (Col1 matches '^[\\s]*$' ? null : Col1) AS Col1...