如何使用 Pig 读取非定界 JSON?

Posted

技术标签:

【中文标题】如何使用 Pig 读取非定界 JSON?【英文标题】:How to read non-delimited JSON using Pig? 【发布时间】:2016-03-03 00:17:40 【问题描述】:

我有一个原始文本如下所示的 json 文件:

a:1,b:2,c:3a:3,b:3,c:5a:3,b:3,c:9

在做

raw = LOAD 'jsonfile.text' USING JsonLoader('a:chararry,b:chararray,c:chararry') ;

dump raw;

只返回 1 条记录。

日志的实际摘录:

输入:成功读取 1 条记录(630644858 字节)来自: "s3n://logstash/ls.s3.ip-10-45-56-56.2016-03-02T23.10.part42.txt"

输出:成功将 1 条记录(1900 字节)存储在: “hdfs://nameservice1/tmp/temp-1489272670/tmp-1959659634”

似乎只读取了 JSON 的第一条记录。 Json 文件没有分隔。

有人有什么建议吗?

【问题讨论】:

为格式错误的 json 添加一个信封? 【参考方案1】:

我建议先进行一次字符串替换 -> \n。然后每行将有一个有效的 json 对象,并且 json 解析应该可以工作。

【讨论】:

a = LOAD 's3n://logstash/ls.s3.ip-10-45-56-56.2016-03-02T23.13.part55.txt' as (raw:chararray); b = foreach a 生成 REPLACE(raw, '', '\n');无论如何我可以使用 Jsonloader 加载别名而不必先保存它吗?【参考方案2】:

查看 twitter 大象​​鸟 jar,它可用于处理几乎任何类型的 JSON 数据。

查看此内容以供参考 - 处理与您类似的 JSON 数据的示例 pig 脚本!

https://gist.github.com/neilkod/2898455

希望这会有所帮助!!

【讨论】:

感谢您的链接。我也用了象鸟罐,可惜没用。我最后只是用“\\n”替换了“”。希望有另一种解决方案。

以上是关于如何使用 Pig 读取非定界 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

如何读取 CSV 并生成 json/avro 文件,其中 pig 按第一列的值分组?

使用 Apache PIG 读取多行 JSON

pig 新手,如何使用 pig 中的键值对子集将 JSON 转换为另一个 JSON?

可以使用 PIG 读取的文件格式

如何使用 Pig 检查 JSON 中缺少的密钥?

如何解码来自列的 Pig 中的 JSON?