Apache pig 给定组操作的资源,如何将每个嵌套包存储在以组命名的文件夹中?
我有一个亲戚D: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 |
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
参考资料:被接受,因为它似乎回答了我提出的问题,但我还没有实际测试过它。