基于多个 KeySelector 对 Flink DataSet 进行排序

Sort Flink DataSet based on multiple KeySelectors

我想使用多个 KeySelector 函数基于多个值对 POJO 数据集进行排序:

    DataSet<PoJo> data = input
            .sortPartition(new KeySelector<PoJo, Integer>() { 
                 public Integer getKey(PoJo element) { return someKeyFromPojo(element); }}, Order.Descending)
            .sortPartition(new KeySelector<PoJo, Integer>() { 
                 public Integer getKey(PoJo element) { return anotherKeyFromPojo(element); }}, Order.Ascending);

这会产生“无法链接 KeySelector”错误。根据 Flink 文档,应该可以链接 sortPartition 函数。

有没有不使用 Field 表达式就能解决这个问题的方法?

当且仅当您使用 sortPartition(int field, Order order)sortPartition(String field, Order order) 时,您可以链接 sortPartition 调用。 sortPartition(KeySelector<T, K> keyExtractor, Order order) 不允许链接。

如果你必须计算密钥,你的 KeySelector 可以 return 任何你喜欢的,只要它是可散列的和可比较的。例如,元组 (someKey, anotherKey).