Scala 如何使用Datastax连接器从Spark Dataframe更新特定的Cassandra列集
我有一个由几列组成的Cassandra表,我想从Spark 2.4.0中更新其中一列(以及多列的内容?)。但是如果我没有提供所有的列,那么记录就不会得到更新 卡桑德拉模式: 要点是SparkScala 如何使用Datastax连接器从Spark Dataframe更新特定的Cassandra列集,scala,apache-spark,apache-spark-sql,cassandra-3.0,spark-cassandra-connector,Scala,Apache Spark,Apache Spark Sql,Cassandra 3.0,Spark Cassandra Connector,我有一个由几列组成的Cassandra表,我想从Spark 2.4.0中更新其中一列(以及多列的内容?)。但是如果我没有提供所有的列,那么记录就不会得到更新 卡桑德拉模式: 要点是SparkDataFrame由rowkey和必须在Cassandra表中更新的时间戳组成 我试图在选项之后选择列,但似乎没有这样的方法 finalDF.select("rowkey","current_ts") .withColumnRenamed("current_ts","timestamp") .writ
DataFrame
由rowkey
和必须在Cassandra表中更新的时间戳组成
我试图在选项之后选择列,但似乎没有这样的方法
finalDF.select("rowkey","current_ts")
.withColumnRenamed("current_ts","timestamp")
.write
.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> "table_data", "keyspace" -> "ks_data"))
.mode("overwrite")
.option("confirm.truncate","true")
.save()
说
然后Cassandra表应该保存更新后的值
rowkey,message,number,timestamp,name
1,hello,12345,12233999,ABC
我使用的是DataFrameAPI。因此,不能使用rdd方法。我怎么能做到?Cassandra版本3.11.3,Datastax connector 2.4.0-2.11说明是
SaveMode
用于指定将数据帧保存到数据源的预期行为。(不仅适用于c*而且适用于任何数据源)。有
SaveMode.append
import org.apache.spark.sql.SaveMode
finalDF.select("rowkey","current_ts")
.withColumnRenamed("current_ts","timestamp")
.write
.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> "table_data", "keyspace" -> "ks_data"))
.mode(SaveMode.Append)
.option("confirm.truncate","true")
.save()
请参见上的spark文档,将保存模式更改为“追加”解决了此问题。有什么澄清吗?
rowkey,message,number,timestamp,name
1,hello,12345,12233999,ABC
import org.apache.spark.sql.SaveMode
finalDF.select("rowkey","current_ts")
.withColumnRenamed("current_ts","timestamp")
.write
.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> "table_data", "keyspace" -> "ks_data"))
.mode(SaveMode.Append)
.option("confirm.truncate","true")
.save()