在pig中获取名称值json

xqkwcwgp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(338)

嗨,伙计们,我刚开始做pig,我想知道jsonload是否能够解析json中的所有值。
例如:

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

我需要把“食物”作为一种关系储存在chararray和“tacos”中,这是“食物”对另一种关系的价值。
在阅读了许多教程和文档之后,我还没有找到一个内置的方法来实现这一点。
这是否意味着唯一的解决办法是通过自定义项?
谢谢!

3ks5zfa0

3ks5zfa01#

输入-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)
o3imoua4

o3imoua42#

我从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';

测试.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])

谢谢!

相关问题