如果使用spark-cassandra驱动程序不存在行,如何将行插入cassandra?

时间:2016-12-23 20:16:55

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

我想从数据框写入cassandra,我想在已经存在特定行的情况下排除行(即主键 - 虽然发生了upserts,但我不想更改其他列)使用spark-cassandra连接器。我们有办法做到吗?

感谢!

3 个答案:

答案 0 :(得分:2)

您可以使用this pr中引入的ifNotExists WriteConf选项。

它的工作原理如下:

val writeConf = WriteConf(ifNotExists = true)
rdd.saveToCassandra(keyspaceName, tableName, writeConf = writeConf)

答案 1 :(得分:1)

你可以做到

sparkConf.set("spark.cassandra.output.ifNotExists", "true")

使用此配置
如果partition key and clustering column are same as row which exists in cassandra
write will be ignored
别的write will be performed

https://docs.datastax.com/en/cql/3.1/cql/cql_reference/insert_r.html#reference_ds_gp2_1jp_xj__if-not-exists

https://github.com/datastax/spark-cassandra-connector/blob/master/doc/reference.md#write-tuning-parameters

答案 2 :(得分:0)

Srinu,这一切归结为"在写之前阅读"无论你是否使用Spark。

但是有IF NOT EXISTS条款:

  

如果列存在,则会更新。如果没有,则创建该行   存在。使用IF NOT EXISTS仅在行时执行插入   尚不存在。使用IF NOT EXISTS会导致性能下降   与内部使用Paxos相关联。有关Paxos的信息,   请参阅Cassandra 2.1文档或Cassandra 2.0文档。

http://docs.datastax.com/en/cql/3.1/cql/cql_reference/insert_r.html