Pig LOAD with SPLIT和COGROUP以及映射器的数量

时间:2014-07-30 08:06:17

标签: hadoop apache-pig

我注意到,当我介绍一个' SPLIT'时,猪工作中的地图制作者数量增加了一倍。和一个' COGROUP'装载后在猪脚本中的声明。 它是否正确?有谁知道为什么会这样?

我使用PigStorage加载数据集:

A = LOAD 'test.csv' USING PigStorage;

cat test.csv
A   123
A   345
B   234
B   123

然后我使用SPLIT将数据集拆分为两个关系(使用过滤器的结果相同)。然后我将两个关系合并为一个,然后存储它。

SPLIT A INTO AA IF $0 == 'A', AB IF $0 == 'B';
CG = COGROUP AA BY $1, AB BY $1;

STORE CG INTO 'cg' USING PigStorage();

当我这样做时,我可以从我的(本地)输出中看到以下行:

Success!
Job Stats (time in seconds):
JobId   Alias   Feature Outputs
job_local_0001  A,AA,AB,CG  COGROUP /test/cg,

Input(s):
Successfully read records from: "/test/test.csv"
Successfully read records from: "/test/test.csv"

输出(一个或多个):    成功将记录存储在:" / test / cg"

因此看起来数据被读取两次。实际上,我可以看到映射器的数量在群集上翻倍。

导致这种行为的原因是什么?有没有办法避免它,或者它是否有充分的理由让我失踪?

2 个答案:

答案 0 :(得分:0)

这取决于您如何使用AA,AB以及如何运行脚本。

  • 如果您在脚本或grunt中编写dump AA; dump AB;,则会有两个作业。
  • 如果您在 grunt 中写下store AA into '...'; store AB into '...';,那么也会有两个作业。

但是,如果您在脚本中编写store AA into '...'; store AB into '...';并使用Pig运行此脚本(grunt中的不是),则只会有一个作业。

答案 1 :(得分:0)

这将避免双文件读取

ng-view