我使用ApacheFlink的数据集api发现 sortPartition 转换只支持位置键和表达式键,但不支持键选择器函数。我用 java.util.Map 作为位置键或表达式键不支持的数据类型。我怎么用这个 sortPartition 数据类型的转换,例如 java.util.Map ?
sortPartition
java.util.Map
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());
2ledvvac2#
flink的键选择器函数是语法糖,可以用两个map函数轻松地手动实现。第一个 MapFunction 提取键字段并返回 Tuple2<Key, Input> 其中键字段是提取的键,输入字段是原始输入(即 Map 在你的情况下)。结果数据集使用第一个元组字段(索引0)上的位置键进行排序。第二个 MapFunction 将输入字段从 Tuple2<Key, Input> 元组。总体代码如下所示:
MapFunction
Tuple2<Key, Input>
Map
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());
2条答案
按热度按时间nkhmeac61#
谢谢,它非常有用,所以我可以用这种类似的方法来解决排序组数据集上的聚合问题吗?
例如:
2ledvvac2#
flink的键选择器函数是语法糖,可以用两个map函数轻松地手动实现。
第一个
MapFunction
提取键字段并返回Tuple2<Key, Input>
其中键字段是提取的键,输入字段是原始输入(即Map
在你的情况下)。结果数据集使用第一个元组字段(索引0)上的位置键进行排序。
第二个
MapFunction
将输入字段从Tuple2<Key, Input>
元组。总体代码如下所示: