目标:通过cassandra中的火花流和存储数据读取kafka 作者:Java Spark cassandra连接器1.6 数据输入:简单的json线对象{“id”:“1”,“field1”:“value1}
我有一个java类,可以通过spark streaming从kafka读取,处理读取的数据然后将其存储在cassandra中。
这是主要代码:
**JavaPairReceiverInputDStream**<String, String> messages =
KafkaUtils.createStream(ssc,
targetKafkaServerPort, targetTopic, topicMap);
**JavaDStream** list = messages.map(new Function<Tuple2<String,String>,List<Object>>(){
public List<Object> call( Tuple2<String,String> tuple2){
List<Object> **list**=new ArrayList<Object>();
Gson gson = new Gson();
MyClass myclass = gson.fromJson(tuple2._2(), MyClass.class);
myclass.setNewData("new_data");
String jsonInString = gson.toJson(myclass);
list.add(jsonInString);
return list;
}
});
下一个代码不正确:
**javaFunctions**(list)
.writerBuilder("schema", "table", mapToRow(JavaDStream.class))
.saveToCassandra();
因为“javaFunctions”方法需要JavaRDD对象而“list”是JavaDStream ...
我需要将JavaDStream转换为JavaRDD,但我找不到正确的方法......
任何帮助?
答案 0 :(得分:0)
让我们来使用 import static com.datastax.spark.connector.japi.CassandraStreamingJavaUtil。*而不是com.datastax.spark.connector.japi.CassandraJavaUtil。*
答案 1 :(得分:0)
嗯,不是真的......我做的是在创建dsStream之后使用foreachRDD:
dStream.foreachRDD(new Function<JavaRDD<MyObject>, Void>() {
@Override
public Void call(JavaRDD<MyObject> rdd) throws Exception {
if (rdd != null) {
javaFunctions(rdd)
.writerBuilder("schema", "table", mapToRow(MyObject.class))
.saveToCassandra();
logging(" --> Saved data to cassandra",1,null);
}
return null;
}
});
希望有用...