如何在 Pig 中从 json 中加载 json 和 value?

Posted

技术标签:

【中文标题】如何在 Pig 中从 json 中加载 json 和 value?【英文标题】:How to load json and value out of json in Pig? 【发布时间】:2018-05-11 18:27:43 【问题描述】:

我有一个json和json中的值

000000,"000":"phoneNumber":null,"firstName":"xyz","lastName":"pqr","email":"email@xyz.com","alternatePickup":true ,"sendTextNotification":false,"isSendTextNotification":false,"isAlternatePickup":true

我正在尝试使用大象鸟 json 加载器将这个 json 加载到猪中,但无法做到。 我可以加载以下 json

"000":"phoneNumber":null,"firstName":"xyz","lastName":"pqr","email":"email@xyz.com","alternatePickup":true," sendTextNotification":false,"isSendTextNotification":false,"isAlternatePickup":true

使用以下脚本 -

REGISTER json-simple-1.1.1.jar;
REGISTER elephant-bird-pig-4.3.jar;
REGISTER elephant-bird-hadoop-compat-4.3.jar;

json_data = load 'ek.json' using com.twitter.elephantbird.pig.load.JsonLoader() AS (json_key: [(phoneNumber:chararray,firstName:chararray,lastName:chararray,email:chararray,alternatePickup:boolean,sendTextNotification:boolean,isSendTextNotification:boolean,isAlternatePickup:boolean)]);

dump json_data;

但是当我从 json 中包含值时

json_data = load 'ek.json' using com.twitter.elephantbird.pig.load.JsonLoader() AS (id:int,json_key: [(phoneNumber:chararray,firstName:chararray,lastName:chararray,email:chararray,alternatePickup:boolean,sendTextNotification:boolean,isSendTextNotification:boolean,isAlternatePickup:boolean)]);

它不工作!提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

JsonLoader 只允许加载正确的 json,而您的格式实际上是 CSV。您可以按照复杂度的顺序排列三个选项:

    调整您的输入格式并将 id 作为其中的一部分 以 CSV 格式加载数据(作为 2 个字段:id 和 json,然后使用自定义 UDF 将 json 字段解析为元组) 编写允许您使用原始格式的自定义加载程序。

【讨论】:

【参考方案2】:

你可以使用内置的 JsonStorage 和 JsonLoader()

a = load 'a.json' using JsonLoader('a0:int,a1:(a10:int,a11:chararray),a2:(a20:double,a21:bytearray),a3:[chararray]');  

在这个例子中,数据是在没有模式的情况下加载的;它假定输入目录中有一个 .pig_schema(由 JsonStorage 生成)。

a = load 'a.json' using JsonLoader(); 

【讨论】:

以上是关于如何在 Pig 中从 json 中加载 json 和 value?的主要内容,如果未能解决你的问题,请参考以下文章

在 Hortonworks Sandbox 内的 Pig 脚本中加载 JSON 文件

如何解码来自列的 Pig 中的 JSON?

如何在 Pig Latin 中每行加载一个带有 JSON 数组的文件

将 JSON 格式表加载到 Pig 中

如何在 appsettings.json 中加载多态对象

如何在主方法 Flutter 中加载 json?