Spark Cassandra 将数据集追加到具有空值的表中

bel*_*cea 0 scala insert-update cassandra apache-spark spark-cassandra-connector

我使用DataStax Spark 连接器来填充 Cassandra 集群并处理不同作业中的数据(由于 Spark 不支持流处理的一些操作,例如双重聚合)。所以我想将不同作业的数据存储在同一个表中。假设第一个流作业在此表中插入一行(使用 foreach 编写器,因为连接器尚不支持流式写入)。

INSERT INTO keyspace_name.table_name (id, col1, col2) VALUES ("test", 1, null);
Run Code Online (Sandbox Code Playgroud)

如果我附加(更新插入)其中包含空列的数据集,而 Cassandra 中该行已经有非空值,该怎么办?

// One row of the dataset = "test", null, 2
dataset.write
  .format("org.apache.spark.sql.cassandra")
    .option("keyspace", keyspace)
  .option("table", table)
  .mode(SaveMode.Append)
  .save()
Run Code Online (Sandbox Code Playgroud)

如果我正确理解文档,以前的非空值将被新的空值覆盖?如果是这样,有没有办法保留现有的非空值?或者我是否必须将每个作业的数据存储在单独的表中?

und*_*ble 5

是的。非 Null 值将被 null 覆盖。

要避免这种行为,请使用spark.cassandra.output.ignoreNulls = true. 这将导致所有空值保持未设置而不是绑定。 写入调优参数