Apache spark 火花流:使用对象作为';mapToPair';

Apache spark 火花流:使用对象作为';mapToPair';,apache-spark,spark-streaming,Apache Spark,Spark Streaming,在Spark Streaming应用程序中,我收到以下数据类型: { "timestamp": 1479740400000, "key": "power", "value": 50 } 我想按时间戳和键进行分组,并聚合值字段 有没有办法通过对象而不是字符串设置关键帧?我想做如下事情: JavaPairDStream<AggregationKey, Integer> aggregation = data.mapToPair( (PairFunction<Da

在Spark Streaming应用程序中,我收到以下数据类型:

{
  "timestamp": 1479740400000,
  "key": "power",
  "value": 50
}
我想按
时间戳
进行分组,并聚合
字段

有没有办法通过对象而不是字符串设置关键帧?我想做如下事情:

JavaPairDStream<AggregationKey, Integer> aggregation = data.mapToPair(
    (PairFunction<DataObject, AggregationKey, Integer>) data -> {
        return new Tuple2<>(new AggregationKey(data), data.value);
    }
).reduceByKey(
    (Function2<Integer, Integer, Integer>) (value1, value2) -> {
        return value1 + value2;
    }
);
JavaPairDStream聚合=data.mapToPair(
(配对函数)数据->{
返回新的Tuple2(新的AggregationKey(data),data.value);
}
)D.还原基(
(功能2)(值1、值2)->{
返回值1+2;
}
);
但这种尝试分组的方式在Spark中不起作用


为了在过渡期间解决这个问题,我正在执行
newaggregationkey(data).toString()
。我不知道这是否是一个可接受的解决方案。

任何对象都可以与
byKey
方法一起使用,只要:

  • 它可以序列化
  • 具有一致的散列
  • 有意义的平等