【问题标题】:Apache Pig - How to read data from CSV fileApache Pig - 如何从 CSV 文件中读取数据
【发布时间】:2015-11-19 10:46:50
【问题描述】:

Apache Pig - 如何从 CSV 文件中读取数据,数据可选用双引号括起来?

示例数据如下:

"Traditional",0.03,"Department, of Housing and Urban Development (HUD)",0.01 

预期输出:

Traditional  0.03  Department, of Housing and Urban Development (HUD)  0.01

在上面的示例中,我们有 4 列。 2 用双引号括起来,2 不是,并且是浮点数据类型。此外,第三列在数据本身中有一个逗号。

请帮助我提供一些与 Pig 相关的 API(示例代码),这将有助于正确拆分数据并使用位置表示法处理它们,例如 $0、$1、$2、$3。

我已经从PiggyBank探索了CSVExcelStorageCSVLoader,但我无法正确拆分。

【问题讨论】:

标签: apache-pig


【解决方案1】:
a = LOAD 'filename.csv' USING PigStorage (',') AS (fieldname:chararray, fieldname2:float);

DUMP a;

【讨论】:

  • 如果它解释了它提供的代码的作用,这将是一个更好的答案。
【解决方案2】:

选项 1 - 使用 CSVLoader 或 CSVExcelStorage

 REGISTER piggybank.jar;
 DEFINE CSVLoader org.apache.pig.piggybank.storage.CSVLoader();

 a = load 'data' USING CSVLoader(',') AS (field1:chararray,field2:double,
                                          field3:chararray,field4:chararray);

 b = FOREACH a GENERATE $0,$1,$2,$3;

 DUMP b;

选项 2 – TextLoader + STRSPLIT + REPLACE

 A = LOAD '/path/to/files/' USING TextLoader() AS (line:chararray);

 B = FOREACH A GENERATE REPLACE(line,'"','');

 C = FOREACH B GENERATE FLATTEN(STRSPLIT(line, ','));

 DUMP C;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2023-01-18
    • 2015-07-25
    • 2014-01-07
    • 2019-09-17
    相关资源
    最近更新 更多