在猪中存储多个变量

时间:2017-03-14 02:55:36

标签: csv hadoop apache-pig

我是猪的新手,我不知道该怎么去谷歌,因为我得到的结果并没有真正解决我的问题。

我现在拥有的是什么。

a = LOAD 'SOME_FILE.csv' using PigStorage(',') AS schema; 
C = FOREACH B GENERATE $0, $1,$2 ; 
STORE C into 'some storage' using PigStorage(';')

我想要做的是通过for循环运行它并将它们存储在同一个文件中。

我如何实现这一目标?谢谢。换句话说,我有SOME_FILE.csv,SOME_FILE_1.csv,SOME_FILE_2.csv等等。但我想通过相同的FOREACH语句运行它们,并且只运行一个STORE语句或至少将结果连接到相同的输出。

很抱歉,如果我不清楚这一点。

而不是'SOME_FILE_*.csv',我怎么把它全部写到同一个文件?在这种情况下,我需要处理的文件数量超过3个。

感谢。

2 个答案:

答案 0 :(得分:2)

假设您的输入文件具有相同的架构:

a = LOAD 'SOME_FILE.csv' using PigStorage(',') AS schema;
b = LOAD 'SOME_FILE_1.csv' USING PigStorage(',') AS schema;
c = LOAD 'SOME_FILE_2.csv' USING PigStorage(',') AS schema;

您可以使用UNION来连接输入

a_b_c = UNION a,b,c; 
C = FOREACH a_b_c GENERATE $0, $1,$2; 
STORE C into 'some storage' using PigStorage(';');

答案 1 :(得分:0)

你可以用两种方式做事

 1.use glob function for uploading multiple csv in same directory from hdfs and
  1. 使用union
  2. glob功能
    在hdfs中创建目录并将所有SOME_FILE _ * .csv放入hdfs中创建的目录

    hadoop dfs -mkdir -p / user / hduser / data

    将csv放入hdfs

    中创建的目录中

    hadoop dfs -put /location_of_file/some_files*.csv / user / hduser / data

    hadoop dfs -ls / user / hduser / data

    使用

    转到apache pig的grunt shell

    pig -x mapreduce

    a = load'/ user / hduser / data / {SOME_FILE,SOME_FILE_1,SOME_FILE_2} .csv'使用PigStorage(',')作为架构;

    转储a;