2016-11-21 63 views
1

在我的星火流應用程序,我收到了以下數據類型:星火流:使用對象作爲重點「mapToPair」

{ 
    "timestamp": 1479740400000, 
    "key": "power", 
    "value": 50 
} 

我想按timestampkey和聚集value領域。

有沒有什麼方法通過對象而不是字符串鍵控?我想要做類似如下的事情:

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; 
    } 
); 

但是這種嘗試分組的方式在Spark中不起作用。

爲了解決這個問題,我在做臨時工new AggregationKey(data).toString()。我不知道這是否是一個可接受的解決方案。

回答

0

任何對象都可以與byKey方法,只要被用作:

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