我想從數據框寫入cassandra,並且我希望在使用spark-cassandra連接器的情況下排除行(如果某個特定行已經存在)(即主鍵 - 儘管發生了upserts,我不想更改其他列) 。有沒有辦法可以做到這一點?如何使用spark- cassandra驅動程序將行插入到cassandra中(如果它們不存在)?
謝謝。
我想從數據框寫入cassandra,並且我希望在使用spark-cassandra連接器的情況下排除行(如果某個特定行已經存在)(即主鍵 - 儘管發生了upserts,我不想更改其他列) 。有沒有辦法可以做到這一點?如何使用spark- cassandra驅動程序將行插入到cassandra中(如果它們不存在)?
謝謝。
可以使用ifNotExists這是在this pr介紹WriteConf
選項。
它的工作原理就像這樣:
val writeConf = WriteConf(ifNotExists = true)
rdd.saveToCassandra(keyspaceName, tableName, writeConf = writeConf)
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
你可以做
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
你可以發佈你期望的數據樣本嗎?解釋不完全清楚。 – maasg
例如,如果我的主鍵是(x,y),那麼當我們向cassandra插入數據框時,我們需要跳過具有相同主鍵的行? – GSR