Hadoop 使用ApachePig读取多行JSON
我有一个JSON文件,希望使用ApachePig进行读取 我尝试使用常规的Hadoop 使用ApachePig读取多行JSON,hadoop,apache-pig,Hadoop,Apache Pig,我有一个JSON文件,希望使用ApachePig进行读取 我尝试使用常规的JSONLOADER,但看起来JSONLOADER只适用于单行JSON。然后我尝试了象鸟。但我仍然不能正确地看到结果。有谁能提出一个解决方案吗 输入: {"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstN
JSONLOADER
,但看起来JSONLOADER
只适用于单行JSON。然后我尝试了象鸟。但我仍然不能正确地看到结果。有谁能提出一个解决方案吗
输入:
{"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在评论中提到的,答案基本上是您确实需要将您的输入更改为一行
JsonLoader或elephantbird loader将始终仅适用于单个
线路。它不适用于多行。您需要转换您的输入
在输送至清管器之前,先输送至单线。一个解决方法是编写一个
shell脚本并调用逻辑将多行替换为单行
使用“SED”命令,然后在shell脚本中调用pig脚本。
此链接将帮助您如何通过shell脚本调用pig
嗨,湿婆…你能回答我的问题吗@Sivasakthi JayaramanJsonLoader或elephantbird loader将始终仅适用于单线。它不适用于多行。在传递到pig之前,您需要将输入转换为单行。一种解决方法是编写一个shell脚本,使用“SED”命令调用逻辑将多行替换为单行,然后在shell脚本中调用pig脚本。此链接将帮助您如何通过shell脚本调用pig。