Apache Pig - 如何从 CSV 文件中读取数据

Posted

技术标签:

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

,数据可选用双引号括起来?

示例数据如下:

"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,但我无法正确拆分。

【问题讨论】:

csv reading in pig, csv file contains quoted comma的可能重复 【参考方案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;

【讨论】:

以上是关于Apache Pig - 如何从 CSV 文件中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache Pig 中加载 csv 文件时出错

无法在 Apache Pig 中过滤 NULL 值

如何将 CSV/TSV 文件从 Pig 加载/导出到 Pandas?

CSV 将大量数据加载到 Pig 中

如何使用 apache pig 将标题行加入多个文件中的详细行

Apache PIG:pigstorage 不添加扩展