使用 Apache PIG 读取多行 JSON
Posted
技术标签:
【中文标题】使用 Apache PIG 读取多行 JSON【英文标题】:Multi-line JSON read using Apache PIG 【发布时间】:2015-02-22 01:19:06 【问题描述】:我有一个 JSON 文件并想使用 Apache Pig 读取。
我尝试使用常规的JSONLOADER
,但看起来JSONLOADER
仅适用于单行 JSON。然后我尝试使用Elephant-Bird
。但我仍然无法正确看到结果。有人可以提出解决方案吗?
输入:
"employees":[
"firstName":"John", "lastName":"Doe",
"firstName":"Anna", "lastName":"Smith",
"firstName":"Peter", "lastName":"Jones"
]
注意:我不想将输入转换为单行。
脚本:
A = LOAD 'input' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad');
B = FOREACH A GENERATE FLATTEN($0#'employees');
Dump B;
预期结果应该是:
([firstName#John,lastName#Doe])
([firstName#Anna,lastName#Smith])
([firstName#Peter,lastName#Jones])
【问题讨论】:
嗨 Siva...你能回答我的问题吗@Sivasakthi Jayaraman JsonLoader 或大象加载器将始终仅适用于单行。它不适用于多行。在传递给 pig 之前,您需要将输入转换为单行。一种解决方法是编写一个 shell 脚本并调用逻辑以使用“SED”命令将多行替换为单行,然后在 shell 脚本中调用 pig 脚本。此链接将帮助您如何通过 shell 脚本调用 pig。 ***.com/questions/26239338/… 【参考方案1】:正如 siva 在 cmets 中提到的,答案基本上是您确实需要将输入更改为单行。
JsonLoader 或大象加载器将始终仅适用于单个 线 。它不适用于多行。你需要转换你的输入 在传递给猪之前先到单行。一种解决方法是写一个 shell脚本并调用逻辑将多行替换为单行 使用“SED”命令,然后在 shell 脚本中调用 pig 脚本。 此链接将帮助您如何通过 shell 脚本调用 pig。
【讨论】:
以上是关于使用 Apache PIG 读取多行 JSON的主要内容,如果未能解决你的问题,请参考以下文章
读取非定界 asciif 文件 Apache Pig Latin
通过 Apache Pig UDF 在 javascript 中读取文件