我有一个关系D:
grunt> DESCRIBE D;
D: {i: int,l: chararray}
应用了GROUP:
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) }
答案 0 :(得分:0)
MultiStorage()
选项对您有用。它将在piggybank jar.
中提供。您需要从此链接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