hadoop—接收json对象数组并转换为表格数据

w6lpcovy  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(520)

我有一个类似这样的json对象数组。由[和]封装的每个数组都在一行上。 [{"event":0,"properties":{"color":"red","connectionType":2}}{"event":30,"properties":{"color":"blue","connectionType":4}},{"event":45,"properties":{"color":"green","connectionType":3}}] [{"event":0,"properties":{"color":"red","connectionType":5}}, {"event":1,"properties":{"color",:"blue","connectionType":6}}] 这里是一个更容易阅读的格式。

[
    {"event":0, "properties":{"color":"red","connectionType":2}},
    {"event":3, "properties":{"color":"blue",'connectionType":4}},
    {"event":45, "properties":{"color":"green","connectionType":3}}
]
[
    {"event":0, "properties":{"color":"red","connectionType":5}},
    {"event":1, "properties":{"color":"blue","connectionType":6}}
]

需要注意的是,[]中的每个json对象都在一行中。每行中对象的数量各不相同。属性中的字段数也各不相同。
对于这些数据,我需要的是获取每个json对象,并将其转换为以逗号分隔或制表符分隔的值形式的表格格式

| event    | color    | connectionType
  0          red        2
  3          blue       4

我看了一些pig用来读取json结构的工具,也就是elephant bird,但是不能让它在我的数据上工作。
我希望能得到其他解决方案的指针,或者使用象鸟/其他pig json解析器的示例代码。我的最终目标是捕获事件和属性的子集并将它们加载到配置单元中。

byqmnocz

byqmnocz1#

在json文件中。你没有开始对象。所以不能区分行。我找到了解决方案,但我已将start对象放在json对象中。

{"startObject":[{"event":0, "properties":{"color":"red","connectionType":2}},{"event":3, "properties":{"color":"blue","connectionType":4}},{"event":45, "properties":{"color":"green","connectionType":3}}]}

A = LOAD '/home/kishore/Data/Pig/pig.json' USING JsonLoader('{(event:chararray,properties: (color:chararray,connectionType:chararray))}');
B = foreach A generate Flatten($0);
C = foreach B generate $0,Flatten($1);
Dump C;

Result

(0,red,2)
(3,blue,4)
(45,green,3)

如果您想解析json对象而不放入start对象,在这种情况下,您应该编写自己的自定义udf。https://gist.github.com/kimsterv/601331
或者去找象鸟https://github.com/twitter/elephant-bird

相关问题