在 PigLatin 中加载 csv 文件

Posted

技术标签:

【中文标题】在 PigLatin 中加载 csv 文件【英文标题】:LOAD csv file in PigLatin 【发布时间】:2015-08-21 10:47:26 【问题描述】:

我正在尝试。记录格式如下: "ABBOTT,DEEDEE W",GRADES 9-12 TEACHER,"52,122.10",0,LBOE,ATLANTA INDEPENDENT SCHOOL SYSTEM,2010

我尝试了以下代码:

A = LOAD '/user/hduser/salaryTravel.csv' using PigStorage(',')  AS (name:chararray,job:chararray,salary:float,TA:float,type:chararray,org:chararray,year:int);

但是输出如下:

("ABBOTT,DEEDEE W",,,122.10",0,)

name 字段作为单独的字段读取,因为名称字段包含逗号 (',')。我怎样才能读到这个记录?

【问题讨论】:

从您的输出看来,名称是一个字段,因为它被引号包围。如果它是单独的字段,它看起来像 ("ABBOTT","DEEDEE W",,,"52","122.10", etcetc)。 我不这么认为。输出具有预期的 7 个字段,尽管它不正确。所以我认为“ABBOT 和 DEEDEE W”是两个领域。无论如何,您知道如何将其作为单个字段来阅读吗? 对不起,我误读了您的输出。不,问题不在于名称 - 而是所有其他字段。我认为缺少引号是把猪扔掉了。首先尝试在所有字段周围加上引号,如果这不起作用,则仅在您定义为 chararray 的字段周围加上引号。因为我注意到 name 和 job 都定义为 chararray 并且我可以看到 name 但看不到 job。 【参考方案1】:

建议使用 CSVExcelStorage 或 CSVLoader API 来加载数据。

REGISTER piggybank.jar;

A = LOAD '/user/hduser/salaryTravel.csv' using org.apache.pig.piggybank.storage.CSVExcelStorage()  AS (name:chararray,job:chararray,salary:float,TA:float,type:chararray,org:chararray,year:int);

REGISTER piggybank.jar;

A = LOAD '/user/hduser/salaryTravel.csv' using org.apache.pig.piggybank.storage. CSVLoader()  AS (name:chararray,job:chararray,salary:float,TA:float,type:chararray,org:chararray,year:int);

Ref : REGEX_EXTRACT error in PIG,分享了一些代码示例。

【讨论】:

以上是关于在 PigLatin 中加载 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在猪中加载由 :: 分隔的数据

在 Core Data 中加载 csv 文件

在 Spark 2.0 中加载压缩的 gzipped csv 文件

使用scala在sql表中加载csv文件

sqlldr : 在单列中加载 csv 文件的多列

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