在PIG中加载不同的json模式

时间:2014-09-24 12:52:40

标签: json hadoop apache-pig

我想知道如何从一个文件中读取不同的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模式,或者不是可能的?

1 个答案:

答案 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,它很棒但过时了。