Pig:在没有架构的情况下对文件中的 json 个对象进行排序

Pig: Sort json objects in a file without a schema

我有一个 pig 脚本,我在其中加载一些数据,通过一个函数流式传输它以获得结果。结果是一个包含 json 个对象的列表,其中包含一个名为 count 的字段。现在我想根据 count 对列表进行降序排序。

我在网上找到的所有文档都说我可以使用 ORDER BY 但为此我需要知道别名的架构。现在,由于这是我在 pig 脚本本身中生成的别名,我不确定如何执行 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 [=17=] 但作业失败了。

从这样的函数中排序关系

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