显然,Spark流中没有对Cassandra接收器的内置支持。我在网上找到了这个示例,该示例为基于ForEachWriter的Spark结构化流实现了自定义Cassandra接收器:
https://dzone.com/articles/cassandra-sink-for-spark-structured-streaming
我知道我们需要创建一个ForeachWriter实现,该实现负责打开到接收器(Cassandra)的连接,写入数据并关闭连接。因此CassandraSinkForeach
和CassandraDriver
类是有意义的。
但是,我不需要使SparkSessionBuilder可序列化,甚至不需要初始化SparkSession
类中的CassandraDriver
实例。似乎这样做的唯一原因是从sparkConf初始化CassandraConnector
。
根据CassandraConnector
文档,可以通过传入的http://datastax.github.io/spark-cassandra-connector/ApiDocs/2.4.0/spark-cassandra-connector/#com.datastax.spark.connector.cql.CassandraConnector
有人可以解释是否需要在worker中初始化SparkSession吗?这是一般模式吗?如果是,为什么要这样?
答案 0 :(得分:1)
如果可以升级到Spark 2.4,则可以使用ForEachBatch,在其中可以在流数据帧的顶部应用批处理写入器。