如何对Apache Flink中的数据集进行排序?
问题描述:
我有一个形式为DataSet>的元组数据集。我希望对String字段上的“整个”数据集进行排序,然后只获取文件中的Long值。 Flink确实提供了排序分区功能,但这对我并不有帮助,因为我需要对数据集进行完全排序。如何对Apache Flink中的数据集进行排序?
答
您还可以使用sortPartition()
到完整DataSet
进行排序,如果你设置的并行性1
:
DataSet<Tuple2<String, Long>> data = ...
DataSet<Tuple2<String, Long>> sorted = data
.sortPartition(0, Order.ASCENDING).setParallelism(1); // sort in one partition
DataSet<Long> longs = sorted.map(new LongExtractor()); // map to extract long
+0
因此,如果并行性未设置为1,那么整个数据集将不会被完全排序?详细地说,如果并行性设置为2,那么每个工作人员将对其数据进行排序,但跨分区不会有升序? –
+1
是的,没错。如果您在调用'sortPartition'之前对DataSet的Sort分区进行分区,则排序的分区将是不相交的分区。 –
数据之前和之后的样本?也许你迄今试过的代码以及它失败了吗? –