Как установить уровень согласованности ONE и ifNotExists в Spark Cassandra DataFrame

У меня есть счетчик в кассандре 3.9

create table counter_table ( id text, hour_no int, platform text, type text, title text,
count_time counter,
PRIMARY KEY (id, hour_no,  platform, type , title));

мой код Spark (2.1.0) Scala (2.11)

import com.datastax.driver.core.{ConsistencyLevel, DataType}
import com.datastax.spark.connector.writer.WriteConf
val writeConf = WriteConf(consistencyLevel = ConsistencyLevel.ONE, ifNotExists = true)

val sqlContext = new org.apache.spark.sql.SQLContext(sc)

val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "false").option("inferSchema", "true").load("csv_file_path")

val newNames = Seq("id" , "hour_no" , "platform" , "type" , "title" , "count_time")
val dfRenamed = df.toDF(newNames: _*)

dfRenamed.write.format("org.apache.spark.sql.cassandra").
     mode(SaveMode.Append).options(Map( "table" -> "counter_table", "keyspace" -> "key1", 
    "output.consistency.level" -> "LOCAL_ONE", "output.ifNotExists" -> "true" )).save()    

Искровой код дает ошибку согласованности

Caused by: com.datastax.driver.core.exceptions.WriteFailureException: 
Cassandra failure during write query at consistency LOCAL_QUORUM (2 responses were required but only 1 replica responded, 1 failed)

Как мы можем указать согласованность ОДНОГО в DataFrame


person Shiva Achari    schedule 08.03.2017    source источник


Ответы (1)


В обоих ваших параметрах отсутствует начало

Все параметры должны иметь префикс spark.cassandra.

Но у вас есть вторая проблема.

Невозможно выполнить IF NOT EXISTS запрос с любым уровнем согласованности, кроме SERIAL, поскольку он использует PAXOS. Это означает, что вы не сможете делать ONE

Обновление: теперь я знаю, что с помощью Paxos CL можно делать некоторые очень опасные вещи, поэтому можно принудительно использовать разные CL для частей транзакции, но вы не должны, поскольку вы в основном нарушите все гарантии, которые вы хотели с проверкой в первую очередь.

person RussS    schedule 08.03.2017