Apache pig 给定组操作的资源,如何将每个嵌套包存储在以组命名的文件夹中?

Apache pig 给定组操作的资源,如何将每个嵌套包存储在以组命名的文件夹中?,apache-pig,Apache Pig,我有一个亲戚D: grunt> DESCRIBE D; D: {i: int,l: chararray} 对其应用组: grunt> G = group D by i; grunt> illustrate G; ------------------------------------- | D | i:int | l:chararray | ------------------------------------- | | 1 |

我有一个亲戚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
存储在名为相应组的文件中?即
/output/1
/output/2

我知道我不能在
foreach
块中使用
store
操作。事实上,以下方法不起作用:

grunt> foreach G { store D into '/output/' + ((chararray) group) }
MultiStorage()
选项适用于您。它将在
piggybank jar中提供。
您需要从这个链接下载并在类路径中设置它

示例:
输入

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$ ls
1       2       _SUCCESS
现在,
output
文件夹包含两个名为1和2的目录,相应的组值将存储在此文件夹中

输出:

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$ ls
1       2       _SUCCESS
参考资料:

被接受,因为它似乎回答了我提出的问题,但我还没有实际测试过它。