Hadoop 使用ApachePig读取多行JSON

Hadoop 使用ApachePig读取多行JSON,hadoop,apache-pig,Hadoop,Apache Pig,我有一个JSON文件,希望使用ApachePig进行读取 我尝试使用常规的JSONLOADER,但看起来JSONLOADER只适用于单行JSON。然后我尝试了象鸟。但我仍然不能正确地看到结果。有谁能提出一个解决方案吗 输入: {"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstN

我有一个JSON文件,希望使用ApachePig进行读取

我尝试使用常规的
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。