【问题标题】:Storing multiple variables in pig在猪中存储多个变量
【发布时间】:2017-03-14 02:55:35
【问题描述】:

我对猪非常陌生,我不知道用谷歌搜索什么,因为我得到的结果并没有真正解决我的问题。

我现在拥有的是。

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 个。

谢谢。

【问题讨论】:

    标签: csv hadoop apache-pig


    【解决方案1】:

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

    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(';');
    

    【讨论】:

    • 在我的问题中添加了一个新部分
    • 假设你所有的 csv 文件都在 /your/this/directory/ 然后 data = LOAD '/your/this/directory/*.csv' using PigStorage(',') AS schema;也可以工作,然后进行转换和存储
    【解决方案2】:

    你可以通过两种方式来做

     1.use glob function for uploading multiple csv in same directory from hdfs and
    
    1. 使用联合

    全局函数
    在 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(',') 作为架构;

    转储一个;

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多