hadoop - 如何读取 pig 中的json数据?

标签 hadoop hive apache-pig hadoop2

我有以下类型的 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)}');

出现错误!!

Unable to recreate exception from backed error: Error: org.codehaus.jackson.JsonParseException: Unexpected end-of-input: expected close marker for ARRAY (from [Source: java.io.ByteArrayInputStream@1553f9b2; line: 1, column: 1]) at [Source: java.io.ByteArrayInputStream@1553f9b2; line: 1, column: 29]

最佳答案

首先,您看到 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)})

希望对您有所帮助!

关于hadoop - 如何读取 pig 中的json数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39663051/

相关文章:

hadoop - Uber模式配置设置已对齐,但作业无法在Uber模式下执行

hadoop - 从非分区表创建分区表

web-services - Hadoop-不带HIVE的带HBASE的ODBC

sql - 在配置单元中按日期重复以前的值

hadoop - 为什么我的 pig 作业中我的 avro 输出文件如此之小而如此之多?

datetime - 加载日期时间字段在 pig latin 0.12 中不起作用

hadoop - 在 PIG 中如何删除相似值

date - 配置单元未检测到时间戳格式

hadoop - 将列名传递给 Hadoop Hive 流作业

scala - 如何在本地使用 Spark BigQuery Connector?