如何在猪中读取json数据?

Posted

技术标签:

【中文标题】如何在猪中读取json数据?【英文标题】:How to read json data in pig? 【发布时间】:2016-09-23 14:17:23 【问题描述】:

我有以下类型的 json 文件:

"employees":[
    "firstName":"John", "lastName":"Doe",
    "firstName":"Anna", "lastName":"Smith",
    "firstName":"Peter", "lastName":"Jones"
]

我正在尝试执行以下 pig 脚本来加载 json 数据

A = load 'pigdemo/employeejson.json' using JsonLoader ('employees:(firstName:chararray),(lastName:chararray)');

出现错误!!

无法从支持的错误重新创建异常:错误: org.codehaus.jackson.JsonParseException:意外的输入结束: ARRAY 的预期关闭标记(来自 [来源: java.io.ByteArrayInputStream@1553f9b2;行:1,列:1])在 [来源:java.io.ByteArrayInputStream@1553f9b2;行:1,列:29]

【问题讨论】:

您遇到的错误是什么 #Satya 我更新了问题 A = 使用 JsonLoader 加载 'pigdemo/employeejson.json' ('employees:(firstName:chararray),(lastName:chararray)');试试这个!! 2016-09-23 07:38:02,032 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 失败! 2016-09-23 07:38:02,040 [main] 错误 org.apache.pig.tools.grunt.Grunt - 错误 2997:无法从支持的错误重新创建异常:AttemptID:attempt_1474637915471_0007_m_000000_3 信息:错误:org.codehaus.jackson。 JsonParseException: Unexpected end-of-input: ARRAY 的预期关闭标记(来自 [Source: java.io.ByteArrayInputStream@7a91efc3; line: 1, column: 1])这是我收到的错误消息@Ankur 试试这个@Avijit:A = 使用 JsonLoader 加载 'pigdemo/employeejson.json' ('employees':(firstName:chararray),(lastName:chararray)); 【参考方案1】:

首先,您看到Unexpected end-of-input 的原因是因为每个重新编码都应该在 1 行中 - 像这样:

"employees":["firstName":"John", "lastName":"Doe", "firstName":"Anna", "lastName":"Smith", "firstName":"Peter", "lastName":"Jones"]

现在 - 因为每一行都是员工列表,所以运行下一个命令

A = load '$flurryData' using JsonLoader ('employees:bag t:tuple(firstName:chararray, lastName:chararray)');
describe A;
dump A;

给出下一个输出

A: employees: t: (firstName: chararray,lastName: chararray)

((John,Doe),(Anna,Smith),(Peter,Jones))

希望有帮助!

【讨论】:

以上是关于如何在猪中读取json数据?的主要内容,如果未能解决你的问题,请参考以下文章

在猪中使用 AvroStorage()

在猪中增加映射器

无法在猪中打开别名的迭代器

如何在猪中使用 rcfilepigstorage

为啥我们需要在猪中运行平均函数之前对关系进行分组

在猪中正确加载日期时间