基于多个 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)
.
我想使用多个 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)
.