我有一个猪脚本,我在其中加载一些数据,通过函数流式传输以获得结果。结果是包含名为count
的字段的json对象列表。现在我想根据count
按降序对列表进行排序。
我在网上找到的所有文档都说我可以使用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
,但工作失败了。
答案 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();