java Spark流式传输到cassandra

时间:2016-07-20 12:04:30

标签: spark-streaming spark-cassandra-connector

目标:通过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,但我找不到正确的方法......

任何帮助?

2 个答案:

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

希望有用...