Spark Cassandra добавляет набор данных в таблицу с нулевыми значениями - PullRequest
0 голосов
/ 07 сентября 2018

Я использую Соединитель DataStax Spark для заполнения кластера Cassandra и обработки данных в разных заданиях (из-за некоторых неподдерживаемых операций Spark для потоковой обработки, таких как двойное агрегирование). Поэтому я хочу хранить данные в одной таблице для разных заданий. Предполагая, что первое потоковое задание вставляет строку в эту таблицу (с использованием средства записи foreach, поскольку соединитель пока не поддерживает потоковую запись ).

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 , предыдущее ненулевое значение будет заменено новым нулевым значением? Если так, есть ли способ сохранить существующий ненулевые значения? Или я должен хранить данные в отдельных таблицах для каждого задания?

1 Ответ

0 голосов
/ 07 сентября 2018

Да. Ненулевые значения будут перезаписаны нулевыми.

Чтобы избежать такого поведения, используйте spark.cassandra.output.ignoreNulls = true. Это приведет к тому, что все нулевые значения останутся неустановленными, а не связанными Запись параметров настройки

...