使用ForeachWriter在Spark流中实现Cassandra接收器

时间:2019-02-23 17:01:04

标签: apache-spark cassandra spark-structured-streaming

显然,Spark流中没有对Cassandra接收器的内置支持。我在网上找到了这个示例,该示例为基于ForEachWriter的Spark结构化流实现了自定义Cassandra接收器:

https://dzone.com/articles/cassandra-sink-for-spark-structured-streaming

我知道我们需要创建一个ForeachWriter实现,该实现负责打开到接收器(Cassandra)的连接,写入数据并关闭连接。因此CassandraSinkForeachCassandraDriver类是有意义的。

但是,我不需要使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

中的CassandraConnectorConfig初始化CassandraConnector对象。

有人可以解释是否需要在worker中初始化SparkSession吗?这是一般模式吗?如果是,为什么要这样?

1 个答案:

答案 0 :(得分:1)

如果可以升级到Spark 2.4,则可以使用ForEachBatch,在其中可以在流数据帧的顶部应用批处理写入器。