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

cgh8pdjw  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(228)

我有个亲戚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 在名为对应组的文件中?即。 /ouput/1 , /output/2 我知道我不能用 store 在一个 foreach 阻止。事实上,以下方法不起作用:

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

ogsagwnx1#

MultiStorage() 这个选项对你有用。它将在 piggybank jar. 你需要从这个链接下载http://www.java2s.com/code/jar/p/downloadpiggybankjar.htm 并将其设置在类路径中。
例子:
输入

1,A
1,B
2,A

Pig手稿:

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

相关问题