ApacheFlink:为什么sortpartition转换不支持keyselector函数

sxissh06  于 2021-06-24  发布在  Flink
关注(0)|答案(2)|浏览(357)

我使用ApacheFlink的数据集api发现 sortPartition 转换只支持位置键和表达式键,但不支持键选择器函数。
我用 java.util.Map 作为位置键或表达式键不支持的数据类型。我怎么用这个 sortPartition 数据类型的转换,例如 java.util.Map ?

nkhmeac6

nkhmeac61#

谢谢,它非常有用,所以我可以用这种类似的方法来解决排序组数据集上的聚合问题吗?
例如:

DataSet<Map> input = ...

DataSet<<Tuple4<Long,Long,Long,Map>> keyed = input.map(new KeyExtractMap());

DataSet<<Tuple4<Long,Long,Long,Map>> sortGrouped = keyed.groupBy(0).sortGroup(1,Order.ASCENDING).sortGroup(2,Order.ASCENDING);

DataSet<Map> result = sortGrouped.map(new UnwrapMap());
2ledvvac

2ledvvac2#

flink的键选择器函数是语法糖,可以用两个map函数轻松地手动实现。
第一个 MapFunction 提取键字段并返回 Tuple2<Key, Input> 其中键字段是提取的键,输入字段是原始输入(即 Map 在你的情况下)。
结果数据集使用第一个元组字段(索引0)上的位置键进行排序。
第二个 MapFunction 将输入字段从 Tuple2<Key, Input> 元组。
总体代码如下所示:

DataSet<Map> input = ...
DataSet<Tuple2<Long, Map>> keyed = input.map(new KeyExtractMap());
DataSet<Tuple2<Long, Map>> sortedKeyed = keyed.sortPartition(0, Order.ASCENDING);
DataSet<Map> sorted = sortedKeyed.map(new UnwrapMap());

相关问题