摄取JSON对象数组并转换为表格数据

时间:2015-08-14 22:17:13

标签: hadoop hive apache-pig hdfs

我有一组像这样的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解析器来获取替代解决方案或示例代码的指示。我的最终目标是捕获事件和属性的子集并将其加载到Hive中。

1 个答案:

答案 0 :(得分:2)

在你的json文件中

。你没有起始对象。所以它不区分行。我找到了解决方案但是我已经在你的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对象,在这种情况下,您应该编写自己的自定义UDF。 https://gist.github.com/kimsterv/601331

或去寻找大象鸟 https://github.com/twitter/elephant-bird