加载值字段包含逗号和特殊字符的 csv 文件时,Hadoop Pig“加载”问题

Posted

技术标签:

【中文标题】加载值字段包含逗号和特殊字符的 csv 文件时,Hadoop Pig“加载”问题【英文标题】:Hadoop Pig "Load" issue when loading a csv file whose value field contains comma and a special character 【发布时间】:2016-05-13 22:59:05 【问题描述】:

我有一个 csv 文件,其示例数据如下所示。 姓名,工作,薪水 ------------------------- 杰克,IT,12,00 美元 ------------------------- 约翰,人力资源,24,00 美元 --------------------------

当我使用此命令加载此数据时 A = LOAD '/USER/XYZ/PIG/FILENAME.CSV' USING PIGSTORAGE(',') as (NAME:chararray,JOB:chararray, Salary:chararray) ;

"$12,00" 中的逗号被视为分隔符,仅加载 $12。 有什么解决方法吗? 是否可以将薪水字段加载为整数(也忽略“$”符号)..

【问题讨论】:

所以你的定界符是“|”为什么不用“|”作为分隔符。 好吧,只是为了表示目的..我在问题中添加了一个类似结构的表格。实际上,逗号是分隔符。 【参考方案1】:

请按照以下步骤操作:

    不用PigStorage使用,org.apache.pig.piggybank.storage.CSVExcelStorage()

    不使用 chararray,将薪水的数据类型指定为 float

【讨论】:

【参考方案2】:

使用“|”加载文件作为分隔符。对于 $ 符号,使用 REPLACE 命令,然后将字段转换为 int

A = LOAD '/USER/XYZ/PIG/FILENAME.CSV' USING PIGSTORAGE('|') as (NAME:chararray,JOB:chararray, Salary:chararray) ;
A1 = FOREACH A GENERATE NAME,JOB,(int)REPLACE(Salary,'([^a-zA-Z0-9.,\\s]+)','');

【讨论】:

以上是关于加载值字段包含逗号和特殊字符的 csv 文件时,Hadoop Pig“加载”问题的主要内容,如果未能解决你的问题,请参考以下文章

Liquibase CSV loadData 失败,带引号的字符串包含逗号

SQLite 在文本字段中使用逗号导入 csv 文件

MySQL 批量加载

CSV (逗号分隔值文件格式)

CSV (逗号分隔值文件格式)

Pig — 如何加载包含用双引号括起来并用逗号分隔的字段的 CSV 文件