Spark Cassandra добавляет набор данных в таблицу с нулевыми значениями

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

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()

Если я правильно понимаю документы, предыдущие не -null значение будет перезаписано новым нулевым значением? Если да, есть ли способ сохранить существующие ненулевые значения? Или мне нужно хранить данные в отдельных таблицах для каждого задания?


person belgacea    schedule 07.09.2018    source источник


Ответы (1)


да. Значения, отличные от NULL, будут перезаписаны нулевым значением.

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

person undefined_variable    schedule 07.09.2018
comment
Итак, если этот параметр включен, у меня будет строка "test", 1 ,2, сохраненная в моей таблице после выполнения двух моих заданий, верно? - person belgacea; 07.09.2018
comment
да .. поскольку col1 в кадре данных имеет значение null, при записи он будет проигнорирован .. - person undefined_variable; 07.09.2018