根据元组中字段的值将数据存储到路径中

时间:2016-02-27 16:11:57

标签: apache-pig

{'aaa', 'bbb', 'ccc'}
....

让我们假设上面的tupple加载了以下架构:

   as (firstField:chararray, secondField:chararray, thirdField:chararray)

我想将元组存储在HDFS中,其路径基于第二个字段(上例中为'bbb')。所以上面的元组将存储在路径

 /SomeBaseDir/bbb/testoutput.txt

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

要加载文件,请使用以下命令。请记住,文件输入数据应该是制表符分隔的。如果您使用任何其他分隔符(如逗号),则更改PigStorage功能中的参数传递。它应该是PigStorage(',')

A = load '/home/abhishek/Work/pigInput/data' using PigStorage('\t') as (firstField:chararray, secondField:chararray, thirdField:chararray);

现在,为了简单地使用第二个元素:

result = foreach A generate secondField;

结果

dump result
('bbb')

您可以使用以下命令

存储它
store result into 'provide the path';

答案 1 :(得分:0)

我认为你想使用MultiStorage(https://pig.apache.org/docs/r0.8.1/api/org/apache/pig/piggybank/storage/MultiStorage.html)。这应该做你想要的。指定基本路径,然后指定子目录应基于的字段。

答案 2 :(得分:0)

PigLatin中的SPLIT操作员可以在这里完成工作。

对于加载的输入数据(in),可以将其拆分为不同的输出变量,如下所示:

loadedData = load ' ' as (.. ,somefield, ) using ... ;

SPLIT loadedData INTO
                       segmentA IF (somefield=='A'),
                       segmentB IF (somefield=='B'),
                       OtherSources OTHERWISE;

store segmentA into 'hdfs://<path for data segmentA >' using ....;
store segmentB into 'hdfs://<path for data segmentB >' using ....;