我想基于多个值对POJO数据集进行排序,因此需要多个KeySelector函数:
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函数。
有没有一种方法可以在不使用字段表达式的情况下解决这个问题?
当且仅当您使用sortPartition(int field, Order order)
或sortPartition(String field, Order order)
时,您可以连锁sortPartition
调用。sortPartition(KeySelector<T, K> keyExtractor, Order order)
不允许链接。
如果你必须计算密钥,那么你的KeySelector
可以返回你喜欢的任何东西,只要它是可散列的和可比较的。例如,诸如(someKey, anotherKey)
的元组。