apachepig,json加载程序

3bygqnnd  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(278)

这是我的示例输入文件:

[{"disknum":36,"disksum":136.401,"disk_rate":1872.0,"disk_lnum": 13}]
[{"disknum":36,"disksum":105.2,"disk_rate":123084.8,"disk_lnum": 13}]

我试图用pig中的jsonloader解析这个json数据,
这是我的剧本:

a = LOAD '/pig/tc.log' using JsonLoader ('disknum:chararray,disksum:chararray,disk_rate:chararray,disk_lnum:chararray');

b = FOREACH a GENERATE disknum,disksum,disk_rate,disk_lnum;

DUMP b;

预期产量:
36,136.401,1872.0,13
36,105.2,123084.8,13
实际输出:
( )
请帮帮我!我错过了什么?

uttx8gqw

uttx8gqw1#

您的输入数据是json数组,这就是pig的jsonload无法读取它的原因。如果可能的话,移除数组(如下所示)或参见将json数组加载到pig中。你应该能搞清楚基本原理。

{"disknum":36,"disksum":136.401,"disk_rate":1872.0,"disk_lnum": 13}
{"disknum":36,"disksum":105.2,"disk_rate":123084.8,"disk_lnum": 13}
e0uiprwp

e0uiprwp2#

请注意文件中对象周围的[]。您可以将其加载到Map并访问字段,也可以使用elephantbird jsonloader。

a = LOAD '/pig/tc.log' using JsonLoader(json:map[]);
b = FOREACH a GENERATE flatten(json#'disknum') AS disknum,
                       flatten(json#'disksum') AS disksum,
                       flatten(json#'disk_rate') AS disk_rate,
                       flatten(json#'disk_lnum') AS disk_lnum;      
DUMP b;

相关问题