关于构建实时分析系统,我正在使用SparkStreaming和Cassandra作为数据处理器和资源。 我正在考虑使用SparkStreaming从Cassandra表中读取数据。并且该表正在不断更新。完成诸如join的操作后,数据将被保存到另一个Cassandra表中。不确定DStream中的每个RDD是否是整个表。如果不是这样,由于具有相同密钥的数据可能不在批处理中,因此联接操作可能会失败。
在我的情况下,下面的代码可以工作吗?希望转发某人会有所帮助。
import org.apache.spark.streaming.dstream.ConstantInputDStream
val ssc = new StreamingContext(conf, Seconds(10))
val cassandraRDD = ssc.cassandraTable("mykeyspace", "test1").select("id", "name")
val dstream = new ConstantInputDStream(ssc, cassandraRDD1)
dstream.foreachRDD{ rdd =>
val anotherRdd = ssc.SparkContext.cassandraTable("mykeyspace", "test2").select("id", "age")
val resultRdd = rdd.join(antherRdd)
resultRdd.print()
}
ssc.start()
ssc.awaitTermination()