Надгробия создаются, когда вы выполняете явное УДАЛЕНИЕ, вставляете значение null
или данные TTLed.
Если вы не укажете значение для указанного столбца c, тогда данные для этой ячейки просто не будут установлены, и если у вас были какие-то предыдущие данные ранее, они не будут перезаписаны, пока вы явно установите их на null
. Но в Spark обычно другая ситуация - по умолчанию он будет вставлять нули, пока вы не укажете spark.cassandra.output.ignoreNulls
как true
- в этом случае он будет обрабатывать нули как неустановленные и не будет перезаписывать предыдущие данные.
Но если вы укажете неполную строку, обновятся будут только предоставленные фрагменты, сохраняя предыдущие данные без изменений.
Если у нас есть следующие таблица и данные:
create table test.v2(id int primary key, valid boolean, v int);
insert into test.v2(id, valid, v) values(2,True, 2);
insert into test.v2(id, valid, v) values(1,True, 1);
мы можем проверить, что данные видны в Spark:
scala> val data = spark.read.cassandraFormat("v2", "test").load()
data: org.apache.spark.sql.DataFrame = [id: int, v: int ... 1 more field]
scala> data.show
+---+---+-----+
| id| v|valid|
+---+---+-----+
| 1| 1| true|
| 2| 2| true|
+---+---+-----+
Теперь обновите данные:
scala> import org.apache.spark.sql.SaveMode
import org.apache.spark.sql.SaveMode
scala> val newData = Seq((2, false)).toDF("id", "valid")
newData: org.apache.spark.sql.DataFrame = [id: int, valid: boolean]
scala> newData.write.cassandraFormat("v2", "test").mode(SaveMode.Append).save()
scala> data.show
+---+---+-----+
| id| v|valid|
+---+---+-----+
| 1| 1| true|
| 2| 2|false|
+---+---+-----+