2016-03-06 110 views
0

數組我有記錄的結構如下:通過迭代豬

"event" : [ {"x":"1","y":"2"} , {"x":"5","y":"2"}] 
"event" : [ {"random":"r", "pol" : "t", "a" : "b"} , {"x":"4","y":5"}] 
"event" : [ {"random":"f", "pol" : "w", "a" : "r"} , {"x":"12","y":5"} , {"x":"6","y":"7"}] 

我感興趣的領域是X &年。對於每條記錄,我需要提取x值最高的地圖。

I.E.爲第一事件,挑{"x":"5","y":"2"},對於第二{"x":"4","y":5"}和第三{"x":"12","y":5"}

我知道,我們可以使用一個UDF通過陣列中的每個地圖進行迭代,並挑選一個與最大x值,但有一種方法,其中i可以在不寫UDF的情況下做到這一點?

回答

-1

你可以做這樣的事情。

REGISTER elephant-bird-core-4.3.jar; 
REGISTER elephant-bird-hadoop-compat-4.5.jar; 
REGISTER elephant-bird-pig-4.5.jar; 

DEFINE JsonLoader com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad=true'); 

records = LOAD '$DATA_PATH' USING JsonLoader() AS (data: map[]); 
events = FOREACH records GENERATE 
           FLATTEN(data#'event') AS event; 

grouped_events = COGROUP events by event#'x', event#'y';  

result = FOREACH grouped_events GENERATE 
     MAX(events.event#'x'), 
     MAX(events.event#'y'); 

-nestedLoad選項有助於負載JSON數組,我們可以如上述變平到獨立的事件。