在 pig 中加载由双冒号 :: 分隔的文件

Posted

技术标签:

【中文标题】在 pig 中加载由双冒号 :: 分隔的文件【英文标题】:Load File delimited by double colon :: in pig 【发布时间】:2016-08-06 02:52:22 【问题描述】:

以下是由双冒号 (::) 分隔的示例数据集。

1::Toy Story (1995)::Animation|Children's|Comedy    

我想从上述数据集中提取三个字段,分别是电影 ID、标题和流派。我为此编写了以下代码

movies = LOAD 'location/of/dataset/on/hdfs ' 
using PigStorage('::')
as 
(MovieID:int,title:chararray,genre:chararray);  

但我收到以下错误

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Pig script failed to  parse:  
 <file script.pig, line 1, column 9> pig script failed to validate:
 java.lang.RuntimeException: could not instantiate 'PigStorage' with arguments '[::]' 

【问题讨论】:

社区recently discussed ASAP begging,并坚决同意这是不可接受的。请不要将此添加到您的问题中。 当您使用 PigStorage 加载数据时,它只需要单个字符作为分隔符。 【参考方案1】:

使用MyRegExloader:您将需要piggybank.jar。

REGISTER '/path/to/piggybank.jar'
A = LOAD '/path/to/dataset' USING org.apache.pig.piggybank.storage.MyRegExLoader('([^\\:]+)::([^\\:]+)::([^\\:]+)') 
      as (movieid:int, title:chararray, genre:chararray);

输出:

(1,玩具总动员(1995),动画|儿童|喜剧)

【讨论】:

以上是关于在 pig 中加载由双冒号 :: 分隔的文件的主要内容,如果未能解决你的问题,请参考以下文章

仅使用 Pig Latin 在 Pig 中加载具有不同分隔符的非结构化数据

使用冒号加载标签时出现 Pig xmlloader 错误

在 pig 中加载多个文件

在 pig 中加载多个文件 - 扩展

在 PIG 中加载 CSV 文件

在 Hortonworks Sandbox 内的 Pig 脚本中加载 JSON 文件