所以我有一个Python Stream-sourced DataFrame df
,它包含我想要放入带有spark-cassandra-connector的Cassandra表的所有数据。我尝试过两种方式:
df.write \
.format("org.apache.spark.sql.cassandra") \
.mode('append') \
.options(table="myTable",keyspace="myKeySpace") \
.save()
query = df.writeStream \
.format("org.apache.spark.sql.cassandra") \
.outputMode('append') \
.options(table="myTable",keyspace="myKeySpace") \
.start()
query.awaitTermination()
但是我继续分别得到这个错误:
pyspark.sql.utils.AnalysisException: "'write' can not be called on streaming Dataset/DataFrame;
和
java.lang.UnsupportedOperationException: Data source org.apache.spark.sql.cassandra does not support streamed writing.
无论如何我可以将我的Streaming DataFrame发送到我的Cassandra表中吗?
答案 0 :(得分:6)
Spark Cassandra Connector目前没有Cassandra的流Sink
。您需要实现自己的Sink
或等待它可用。
如果您使用的是Scala或Java,则可以使用foreach
运算符并使用Using Foreach中所述的ForeachWriter
。
答案 1 :(得分:1)
我知道它是一个旧帖子,正在对其进行更新以供将来参考。
您可以从流数据中批量处理它。像下面一样
def writeToCassandra(writeDF, epochId):
writeDF.write \
.format("org.apache.spark.sql.cassandra") \
.options(table="table_name", keyspace="keyspacename")\
.mode("append") \
.save()
query = sdf3.writeStream \
.trigger(processingTime="10 seconds") \
.outputMode("update") \
.foreachBatch(writeToCassandra) \
.start()