Spark Cassandra使用空值将数据集追加到表中

时间:2018-09-07 09:48:33

标签: scala apache-spark cassandra insert-update spark-cassandra-connector

我使用DataStax Spark connector来填充Cassandra集群并处理不同作业中的数据(由于Spark不支持某些流处理操作,例如双聚合)。所以我想将数据存储在同一张表中以用于不同的作业。假设第一个流作业将在此表中插入一行(使用foreach writer,因为the connector doesn't support streamed writing yet)。

INSERT INTO keyspace_name.table_name (id, col1, col2) VALUES ("test", 1, null);

如果我在一个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()

如果我正确理解了docs,那么先前的非null值将被新的null值覆盖吗?如果是这样,有没有办法保持存在  非空值?还是我必须为每个作业将数据存储在单独的表中?

1 个答案:

答案 0 :(得分:3)

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

为避免此行为,请使用spark.cassandra.output.ignoreNulls = true。这将导致所有空值都保持未设置状态,而不是绑定状态。 Write Tuning Parameters