如何使用 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 按第一列的值分组?