在我的Spark Streaming应用程序中,我收到以下数据类型:
{
"timestamp": 1479740400000,
"key": "power",
"value": 50
}
我希望按timestamp
和key
分组并汇总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 :(得分: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()
}
方法一起使用,只要: