2015-08-14 91 views
3

我有一個像這樣的JSON對象數組。每個由[和]封裝的數組都在一行上。接收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結構 - 也就是大象鳥,但不能完全適應我的數據。

我希望得到替代解決方案,或使用大象鳥 /其他豬JSON解析器示例代碼的指針。我的最終目標是捕獲一系列事件和屬性,並將它們加載到Hive中。

回答

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