Java 在PIG中获取名称值JSON

Java 在PIG中获取名称值JSON,java,hadoop,apache-pig,Java,Hadoop,Apache Pig,大家好,我刚开始做pig,我想知道JsonLoader是否能够解析json中的所有值 例如: {"food":"Tacos", "person":"Alice", "amount":3} 我需要把“食物”作为关系存储在chararray和“玉米饼”中,这是“食物”对另一个关系的价值 在阅读了许多教程和文档之后,我还没有找到一个内置的方法来实现这一点 这是否意味着唯一的解决办法是通过UDF 非常感谢 input-pig.json {"food":"Tacos", "person":"Alice"

大家好,我刚开始做pig,我想知道JsonLoader是否能够解析json中的所有值

例如:

{"food":"Tacos", "person":"Alice", "amount":3}
我需要把“食物”作为关系存储在chararray和“玉米饼”中,这是“食物”对另一个关系的价值

在阅读了许多教程和文档之后,我还没有找到一个内置的方法来实现这一点

这是否意味着唯一的解决办法是通过UDF

非常感谢

input-pig.json

{"food":"Tacos", "person":"Alice", "amount":3}
剧本

A = LOAD '/home/kishore/Data/Pig/pig.json' USING JsonLoader('food:chararray,person:chararray,amount:int');
B = foreach A generate food,person,amount;
Dump B;
输出

(Tacos,Alice,3)

我发现答案是使用twitter上的外部jar

register 'hdfs:/udf/elephant-bird-pig-4.10.jar';
register 'hdfs:/udf/elephant-bird-core-4.10.jar';
register 'hdfs:/udf/elephant-bird-hadoop-compat-4.10.jar';
register 'hdfs:/udf/json-simple-1.1.1.jar';
test.json

{"food":"Tacos", "person":"Alice", "amount":3}
脚本:

A = LOAD 'hdfs:/test.json' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS (json:map[]); 
DUMP A;
我想要的结果是:

([amount#3,food#Tacos,person#Alice])

谢谢

谢谢你的回答,但是你如何得到一个关系的“食物”字段呢?因为“字段名”中存在可能更改的场景,所以我需要同时获取“名称”和“值”字段,以便将它们与map配对。@Zelldon UDF=用户定义函数。如果你不了解ApachePig,请不要发表粗鲁的评论。