如何在Java Spark中使用foreachBatch()编写Cassandra?

如何在Java Spark中使用foreachBatch()编写Cassandra?,java,apache-spark,cassandra,spark-cassandra-connector,Java,Apache Spark,Cassandra,Spark Cassandra Connector,我有以下代码,我想使用spark 2.4结构化流媒体foreachBatch Dataset df=spark .readStream() .格式(“卡夫卡”) .option(“kafka.bootstrap.servers”,“localhost:9092”) .期权(“认购”、“主题1”) .load(); 数据集值=df.selectExpr( “将(值“,”)[0]拆分为字段1”, “将(值“,”)[1]拆分为字段2”, “拆分(值“,”)[2]为字段3”, “拆分(值“,”)[3]

我有以下代码,我想使用spark 2.4结构化流媒体foreachBatch

Dataset df=spark
.readStream()
.格式(“卡夫卡”)
.option(“kafka.bootstrap.servers”,“localhost:9092”)
.期权(“认购”、“主题1”)
.load();
数据集值=df.selectExpr(
“将(值“,”)[0]拆分为字段1”,
“将(值“,”)[1]拆分为字段2”,
“拆分(值“,”)[2]为字段3”,
“拆分(值“,”)[3]为字段4”,
“拆分(值,”,“)[4]为字段5”);
//托多写信给卡桑德拉
values.writeStream().foreachBatch(
新功能2{
公共void调用(数据集,长batchId){
//转换并写入batchDF
}

).start();
尝试将其添加到pom.xml中:

<dependency>
    <groupId>com.datastax.spark</groupId>
    <artifactId>spark-cassandra-connector_2.11</artifactId>
    <version>2.4.2</version>
</dependency>
然后您可以在df上使用cassandraFormat方法:

dataset
      .write
      .cassandraFormat("table","keyspace")
      .save()

当您使用
.forEachBatch
时,您的代码与普通数据集一样工作……在Java中,代码可能如下所示(完整源代码为):

.foreachBatch((VoidFunction2)(df,batchId)->
df.write()
.format(“org.apache.spark.sql.cassandra”)
.options(不可变的映射(“table”、“sttest”、“keyspace”、“test”))
.mode(SaveMode.Append)
.save()
)

2020年9月更新:在

中添加了对spark结构化流媒体的支持,非常感谢Alex。
dataset
      .write
      .cassandraFormat("table","keyspace")
      .save()