1

看起来我错过了什么。我的数据上的 reducer 数量在 HDFS 中创建了那么多文件,但我的数据没有分成多个文件。我注意到的是,如果我group by对按顺序排列的键执行 a 操作,它可以正常工作,就像下面的数据根据​​键很好地分成两个文件:

1    hello
2    bla     
1    hi
2    works
2    end

但是这个数据没有分裂:

1    hello
3    bla     
1    hi
3    works
3    end

我使用的代码适用于一个而不适用于另一个是

InputData = LOAD 'above_data.txt';
GroupReq =  GROUP InputData BY $0 PARALLEL 2;
FinalOutput =   FOREACH GroupReq GENERATE flatten(InputData);
STORE FinalOutput INTO 'output/GroupReq' USING PigStorage ();

上面的代码创建了两个输出部分文件,但在第一个输入中,它很好地分割了数据并将 key 1inpart-r-00000和 key 2in 放入part-r-00001。但是对于第二个输入,它会创建两个部分文件,但所有数据都以part-r-00000. 我缺少什么,我该怎么做才能根据唯一键将数据拆分为多个输出文件?

注意:对于第二个输入,如果我使用PARALLEL 3(3 个减速器),它会创建三个部分文件并添加所有输入数据和输入文件1part-0所有数据。我发现这种行为很奇怪。顺便说一句,我正在使用 Cloudera CDH3B4。3part-3

4

1 回答 1

1

那是因为 key 去的 reducer 的数量被确定为hash(key) % reducersCount. 如果键是整数,hash(key) == key. 当您拥有更多数据时,它们将或多或少均匀分布,因此您不必担心。

于 2011-04-05T05:46:50.187 回答