【问题标题】:Hadoop Pig - Removing csv headerHadoop Pig - 删除 csv 标头
【发布时间】:2015-03-29 22:24:03
【问题描述】:

我的 csv 文件在第一行有标题。将它们加载到 pig 会在任何后续函数(如 SUM)上造成混乱。截至今天,我首先对加载的数据应用过滤器以删除包含标题的行:

affaires    = load 'affaires.csv'   using PigStorage(',') as (NU_AFFA:chararray,    date:chararray) ;
affaires    = filter affaires by date matches '../../..';

我认为它作为一种方法有点愚蠢,我想知道是否有一种方法可以告诉猪不要加载 csv 的第一行,例如加载函数的“as_header”布尔参数。 我在文档上没有看到。最佳做法是什么?你平时是怎么处理的??

【问题讨论】:

    标签: csv hadoop apache-pig


    【解决方案1】:

    CSVExcelStorage 加载器支持跳过标题行,因此使用 CSVExcelStorage 代替 PigStorage。下载 piggybank.jar 并尝试此选项。

    示例

    input.csv

    Name,Age,Location
    a,10,chennai
    b,20,banglore
    

    PigScript:(使用 SKIP_INPUT_HEADER 选项)

    REGISTER '/tmp/piggybank.jar';
    A  = LOAD 'input.csv' USING org.apache.pig.piggybank.storage.CSVExcelStorage(',', 'NO_MULTILINE', 'UNIX', 'SKIP_INPUT_HEADER');
    DUMP A;
    

    输出:

    (a,10,chennai)
    (b,20,banglore)
    

    参考:
    http://pig.apache.org/docs/r0.13.0/api/org/apache/pig/piggybank/storage/CSVExcelStorage.html

    【讨论】:

      【解决方案2】:

      Pig 0.9 的另一个简单选项,不使用 SKIP_INPUT_HEADER 选项可以如下完成:

      输入文件(input.txt)

      input.txt

      Name,Age,Location
      a,10,chennai
      b,20,banglore
      

      PigScript:(不使用 SKIP_INPUT_HEADER 选项,因为此选项在 Pig 0.9 中不可用)

      register '<Your location>/piggybank.jar';
      d_with_headers  = LOAD 'input.csv' using org.apache.pig.piggybank.storage.CSVExcelStorage() AS (name:chararray, age:long, location:chararray);
      
      d = FILTER places_with_headers BY name!='Name';
      
      dump d;
      

      输出:

      (a,10,chennai)
      (b,20,banglore)
      

      【讨论】:

        猜你喜欢
        • 2019-12-26
        • 2016-07-03
        • 2016-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-18
        • 1970-01-01
        相关资源
        最近更新 更多