Spark流媒体:在'mapToPair'

时间:2016-11-21 16:35:09

标签: apache-spark spark-streaming

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

{
  "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()。我不知道这是否是一个可接受的解决方案。

1 个答案:

答案 0 :(得分:2)

任何对象都可以与public String getMeetings(){ // ctx is Contex e.g> getApplicationContext() SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx); return sharedPreferences.getString("key_name", "[]"); // return from shared preferences, if there is nothing for key_name the return will be empty array } public void setMeetings(String your_list_asJsonString){ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("key_name", your_list_asJsonString); // Here you save your string in shared preferences, and than you can access it with key_name editor.commit(); // or editor.apply() } 方法一起使用,只要:

  • 可以序列化
  • 具有一致的哈希
  • 有意义的平等