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

时间:2015-01-07 15:02:38

标签: apache-pig

我有一个关系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) }

1 个答案:

答案 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