apache-flink - 基于多个 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 函数。
有没有办法在不使用字段表达式的情况下解决这个问题?
解决方案
sortPartition
当且仅当您使用sortPartition(int field, Order order)
or时,您才能链接调用sortPartition(String field, Order order)
。sortPartition(KeySelector<T, K> keyExtractor, Order order)
不允许链接。
如果你必须计算密钥,你KeySelector
可以返回任何你喜欢的,只要它是可散列的和可比较的。例如,一个元组,如(someKey, anotherKey)
.
推荐阅读
- qemu - QEMU:WARN(未知此平台是否支持 Secure Guest)
- reactjs - React 中的 Mobx 和 d3 Stacked Bar
- javascript - multer:可以做 [req.file.filename] 但需要 [req.files[0].filename] 或 [req.files.find({fieldname:"samplefield"})]
- ansible - 如何在剧本中设置环境变量,然后在查找中使用它?
- python-3.x - 删除python列表中的冗余子列表
- slack - 用于松弛集成的 auth_token
- angular - ceil值的ngx-slider定位(动态)
- python - 如何用对象的属性替换 .txt 文件中的一行
- python - 如何使用 pandas 将附加列表中的数据插入 csv 文件?
- flutter - 如何用 Flutter 拍摄 360º 照片?