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

问题描述 投票:0回答:1

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

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

如果我附加(upsert)一个带有空列的数据集,其中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,那么先前的非空值将被新的空值覆盖?如果是这样,有没有办法保持现有的非空值?或者我是否必须将数据存储在每个作业的单独表中?

scala apache-spark cassandra insert-update spark-cassandra-connector
1个回答
3
投票

是。非空值将被null覆盖。

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

© www.soinside.com 2019 - 2024. All rights reserved.