2013-10-23 25 views
2

我對HADOOP和豬很新。如何在加載大象鳥後查詢嵌套的json

所以。我有一個單行JSON文件,都有着相同的模式:

{"name":"someName","pkg":[{"F1":"abc","F2":"44","F3":"xyz","F4":1024,"info": 
[{"timestamp":1372631550000,"value":"122","id":"nnn","name":"ppp"}, 
{"timestamp":1372649240000,"value":"222","id":"ggg","name":"qqq"}]} , 
{"F1":"abc","f2":"44","F3":"xyz","F4":1024,"new":[{"type":"event1", "time":1372537000000,"more":" 
{\"bbad\":\"HELLO\",\"is_done\":0,\"ssss\":-128}"}]}]} 

我使用elephantbird加載所有的JSON文件:

data = LOAD 'browsers/gzip' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') as (json:map[]); 

迄今爲止唯一的事情,工作對我來說是查詢返回bytearray的「name」字段。

b = foreach data generate json#'name' as name 

我然後嘗試將其轉換爲映射代替:

c = FOREACH data GENERATE json#'name' as (m:map[]); 
DESCRIBE c; 

並獲得

C:{tuple_0:(M:地圖[])}

和數據看起來像:

({([F1#「abc」,F2#44 ...]))

所以現在我需要過濾所有具有pkg.F1 =「abc」或所有具有pkg.info.value = 122等的那些。

我該怎麼做?

一個代碼示例將非常有用,因爲我已經使用了很多代碼。

謝謝

回答

-1

問題是,你不知道你的數據是如何組織豬。使用

DESCRIBE data; 

找出由JsonLoader返回的結構是什麼,這應該給你如何提取數據的足夠信息。

+0

謝謝回答。 已經嘗試過在詢問這裏之前,沒有足夠的信息。 data:{json:map []} –

1

試試這個

c = FOREACH data GENERATE flatten(json#'name') as (m:map[]);