由于断言失败,将Spark Structure Streaming数据写入Cassandra失败

时间:2018-10-04 19:53:00

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

我想将结构流数据集写入Cassandra。我在脚本中使用了水印,并且使用了类似的代码
于:https://github.com/polomarcus/Spark-Structured-Streaming-Examples 要么 https://github.com/fhuertas/cassandra-sink-spark-structured-streaming 下沉数据。

脚本的流程为: Kafka->水印事件时间-> groupBy->下沉到Cassandra

    val counts= words
        .withWatermark("eventTime", "60 seconds")
        .groupBy(
            window($"eventTime","60 seconds", "30 seconds"),
            $"word")
        .count()

    val query= counts
        .writeStream
        .format("streamsinkprovider.CassandraSinkProvider")
        .outputMode("append")
        .start() 

并且我尝试了两种方法来解决:

import org.apache.spark.sql.cassandra._

df.select("word","count").as[(String,BigInt)]
    .write
    .format("org.apache.spark.sql.cassandra")
    .mode(SaveMode.Append)
    .cassandraFormat("test", CassandraLibrary.CASSANDRA_KEYSPACE)
    .save()  

 ds.rdd.saveToCassandra(
        CassandraLibrary.CASSANDRA_KEYSPACE, 
        "test", SomeColumns("word","count"), cassandraWriteConf)

在两种情况下,我都会遇到以下异常:

  

java.lang.AssertionError:断言失败:没有计划   EventTimeWatermark eventTime#272:时间戳,间隔1分钟

saveToCassandra似乎尝试创建RDD,这导致spark创建新计划。

JDBC接收器(mysql)正常工作,对于相同的代码没有错误。

我已经使用Spark版本2.2.0和2.3.2以及datastax.spark-cassandra-connector 2.0.5和2.3.2尝试了此操作。我尝试使用DSE Cassandra 5.1和Apache Cassandra 3.11

任何想法如何解决这个问题?

0 个答案:

没有答案