使用Apache PIG读取多行JSON

时间:2015-02-22 01:19:07

标签: hadoop apache-pig

我有一个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])  

1 个答案:

答案 0 :(得分:1)

正如siva的评论中提到的,答案基本上是你需要将输入更改为一行。

  

JsonLoader或elephantbird加载器将始终只与单个一起工作   线。它不适用于多线。您需要转换输入   在去猪之前去单行。一个解决方法是写一个   shell脚本并调用逻辑将多行替换为单行   使用'SED'命令,然后在shell脚本中调用pig脚本。   此链接将帮助您如何通过shell脚本调用pig。