首页 > 解决方案 > 基于多个 KeySelector 对 Flink DataSet 进行排序

问题描述

我想使用多个 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 cannot be chained”错误。根据 Flink 文档,应该可以链接 sortPartition 函数。

有没有办法在不使用字段表达式的情况下解决这个问题?

标签: apache-flinkflink-batch

解决方案


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

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


推荐阅读