Scala 如何使用Datastax连接器从Spark Dataframe更新特定的Cassandra列集

Scala 如何使用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

我有一个由几列组成的Cassandra表,我想从Spark 2.4.0中更新其中一列(以及多列的内容?)。但是如果我没有提供所有的列,那么记录就不会得到更新

卡桑德拉模式:

要点是Spark
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.ErrorIfExists
  • SaveMode.Append
  • 保存模式。覆盖
  • 保存模式。忽略
  • 在这种情况下,由于您已经有了数据并且想要追加,因此必须使用
    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()