使用 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的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Apache Pig 中的文件中读取多个文件?

读取非定界 asciif 文件 Apache Pig Latin

Apache Pig - 如何从 CSV 文件中读取数据

通过 Apache Pig UDF 在 javascript 中读取文件

如何读取 CSV 并生成 json/avro 文件,其中 pig 按第一列的值分组?

Pig - 读取存储为 Avro 的 Hive 表