我想知道如何从一个文件中读取不同的Json方案。 在Hadoop中,我会使用jsonparser,如果有问题,我会找出它是什么样的json元素。
一个Doccument中的Json元素是:
{"a": "bla", "e": 123, "f": 333}
{ "a": "bla", "c": "aa"}
我尝试使用以下命令加载第一个Json数组:
A = load '/usr/local/hadoop/stuff.net' USING USING JsonLoader('a:chararray, e:int, f:int');
DUMP A;
它引发错误:ERROR 2088:获取失败。无法检索结果
第二个查询正在运行:
B = load '/home/hadoop/Desktop/aaa' USING JsonLoader('a:chararray, c:chararray');
DUMP B;
但它也向我展示了第一个陈述的结果。
所以我想问一下如何从同一个文件中加载不同的Json模式,或者不是可能的?
答案 0 :(得分:0)
我认为您可以使用Twitter的 elephantbird项目。您可以找到一些示例here。
用法非常简单,只需注册jar文件,然后就可以使用elephant UDF函数加载嵌套的json:
REGISTER 'elephant-bird.jar';
json_file_00 = LOAD 'json_file.json' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad');
json_file_01 = FOREACH json_file_00 GENERATE json_file_00#'fieldName' AS field_name;
我也在使用来自mozilla的akela project,它很棒但过时了。