鉴于 GROUP 操作的结果,我如何将每个嵌套包存储在以组命名的文件夹中?

Given the resoult of a GROUP operation how can I store each nested-bag in a folder named after the group?

我有一个关系 D:

grunt> DESCRIBE D;
D: {i: int,l: chararray}

应用组:

grunt> G = group D by i;
grunt> illustrate G;
-------------------------------------
| D     | i:int    | l:chararray    |
-------------------------------------
|       | 1        | B              |
|       | 1        | A              |
|       | 2        | A              |
-------------------------------------

-----------------------------------------------------------------------
| G     | group:int    | D:bag{:tuple(i:int,l:chararray)}             |
-----------------------------------------------------------------------
|       | 1            | {(1, B), (1, A)}                             |
|       | 2            | {(2, A)}                                     |
-----------------------------------------------------------------------

如何将每个嵌套包 G.D 存储在一个名为相应组的文件中? IE。 /ouput/1/output/2

我知道我不能在 foreach 块中使用 store 操作。事实上,以下是行不通的:

grunt> foreach G { store D into '/output/' + ((chararray) group) }

MultiStorage() 选项适合您。它将在 piggybank jar. 中提供。您需要从此 link http://www.java2s.com/Code/Jar/p/Downloadpiggybankjar.htm 下载并将其设置在您的类路径中。

示例:
输入

1,A
1,B
2,A

PigScript:

REGISTER '/tmp/piggybank.jar';

A = LOAD 'input' USING PigStorage(',') AS (i:int,l:chararray);
B = GROUP A BY i;
STORE B INTO 'output' USING org.apache.pig.piggybank.storage.MultiStorage('output', '0');

现在 output 文件夹包含 2 个名为 1 和 2 的目录,其中相应的组值将存储在此文件夹中。

输出:

output$ ls
1       2       _SUCCESS

参考:
https://pig.apache.org/docs/r0.10.0/api/org/apache/pig/piggybank/storage/MultiStorage.html