我不断从外部源向cassandra写入数据。
现在,我正在使用spark streaming从cassandra连续读取这些数据,代码如下:
val ssc = new StreamingContext(sc, Seconds(5))
val cassandraRDD = ssc.cassandraTable("keyspace2", "feeds")
val dstream = new ConstantInputDStream(ssc, cassandraRDD)
dstream.foreachRDD { rdd =>
println("\n"+rdd.count())
}
ssc.start()
ssc.awaitTermination()
sc.stop()
但是,以下一行:
val cassandraRDD = ssc.cassandraTable("keyspace2", "feeds")
每次从cassandra获取整个表数据。现在只需将最新数据保存到表格中。
我想要做的是让火花流只读取最新数据,即上次读取后添加的数据。
我怎样才能做到这一点?我尝试谷歌这个,但很少有关于此的文档。
我正在使用spark 1.4.1
,scala 2.10.4
和cassandra 2.1.12
。
谢谢!
编辑:
建议的重复问题(由我询问)并不重复,因为它讨论了连接spark streaming和cassandra,而这个问题是关于仅流式传输最新数据。顺便说一下,使用我提供的代码可以从cassandra流式传输。但是,它每次都需要整个表格,而不仅仅是最新的数据。
答案 0 :(得分:1)
Cassandra会有一些低级别的工作,可以通知外部系统(索引器,Spark流等)传入Cassandra的新突变,请阅读:https://issues.apache.org/jira/browse/CASSANDRA-8844