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
探索了CSVExcelStorage
和CSVLoader
,但我无法正确拆分。
【问题讨论】:
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 文件中读取数据的主要内容,如果未能解决你的问题,请参考以下文章
如何将 CSV/TSV 文件从 Pig 加载/导出到 Pandas?