2016-10-10 24 views
0

我有一個豬腳本,我加載了一些數據,通過函數流來獲得結果。結果是包含名爲count的字段的json對象列表。現在我想按照count的降序對列表進行排序。豬:在沒有模式的文件中排序json對象

我在網上發現的所有文件說我可以使用ORDER BY但爲此我需要知道別名的架構。現在,由於這是我在豬腳本中生成的別名,因此我不知道如何執行ORDER BY

因此,我將它存儲在一個臨時文件中,並再次用一個模式加載並進行排序。但我認爲這不是一個很好的做法。有人能告訴我如何在不使用臨時文件的情況下做到這一點嗎?

我的腳本現在的問題是:

DEFINE create_list `create_list.py` SHIP ('$STREAM_FILE_PATH_SYNTAXNET/create_list.py'); 

input_data = LOAD '$DATA_INPUT'; 

result1 = STREAM input_data THROUGH create_list; 
result2 = GROUP result1 BY 1; 
result3 = FOREACH result2 GENERATE FLATTEN(result1); 

STORE result3 INTO '/tmp/summarize'; 

a = LOAD '/tmp/summarize' USING JsonLoader('count:int,parent_pos:chararray,parent:chararray,child_dep:chararray,parent_dep:chararray,child:chararray,child_pos:chararray'); 
x = ORDER a BY count DESC; 
STORE x INTO '$DATA_OUTPUT' USING JsonStorage(); 
fs -rm -r /tmp/summarize 

正如我所說的,我想直接存儲排序列表到$DATA_OUTPUT而不是使用臨時文件。我怎麼做排序?

編輯:我試過x = ORDER result3 BY $0,但工作失敗。

回答

1

順序從功能的關係這樣

result1 = STREAM input_data THROUGH create_list; 
result2 = ORDER result1 BY $0 DESC; -- Note:You might have to use (FLATTEN(result1)).$0 instead of $0 if the tuples/bag are nested. 
STORE result2 INTO '$DATA_OUTPUT' USING JsonStorage(); 
+0

在我不知道的代碼是否將上述工作的問題讀取編輯後。 –