Apache Flink:groupBy / sortBy如何转换支持数据集api中的动态元组?

时间:2016-01-17 12:42:12

标签: apache-flink

我使用java.util.Map作为位置或表​​达式键不支持的数据类型,那么如果组字段数超过25,我如何对基于java.util.Map的数据集进行分组?

示例代码如下所示:

Map<String,Object> input1 = new HashMap<>();
for (int i=0; i<30; i++){
    input.put("groupField" + i,"value"+i);
}
input1.put("quantity",200);
Map<String,Object> input2 = new HashMap<>();
for (int i=0; i<30; i++){
    input2.put("groupField" + i,"value"+i);
}
input2.put("quantity",200);

DataSet<Map<String,Object>> input = env.fromElements(input1,input2);
//how can i group this map based dataSet and aggregate on the 'quantity' field if the number of grouping fields is more than 25?

1 个答案:

答案 0 :(得分:1)

我建议使用自定义类作为组和排序操作的键类型,即从KeySelector返回此键类的对象。如果自定义类正确实现java.lang.Comparable接口和Object.hashCode()方法,则可以将其用作键。

例如,您的密钥类型可以是java.util.ArrayList周围的简单包装,以支持任意多个字段。