У меня есть сценарий для записи данных в таблицу cassandra с помощью spark -sql.
У меня есть кластер кассандры с 3 узлами.
Я создал таблицу с коэффициентом репликации 2, как показано ниже:
CREATE TABLE keyspaceRf2. c_columnar (
id int,
company_id int,
dd date,
c_code text,
year int,
quarter int,
etc ....etc...
PRIMARY KEY (( id, year, quarter), dd, c_code, company_id )
) WITH CLUSTERING ORDER BY ( dd DESC, c_code DESC, company_id DESC);
Я пытаюсь вставить данные в keyspaceRf2. Таблица c_columnar с использованием spark-job на spark-кластере.
Данные вставляются правильно.
Но чтобы проверить количество записей, вставленных в таблицу, я выполняю запрос на подсчет, как показано ниже
val countDf = loadFromCassandra(c_reader,"keyspaceRf2", " c_columnar");
println ( " count = " + countDf.count()
def loadFromCassandra( c_reader: DataFrameReader , keyspace: String , col_Name:String): DataFrame = {
c_reader
.options(Map( "table" -> col_Name, "keyspace" -> keyspace ))
.load()
}
Когда приведенный выше код выполняется, он выдает ошибку, как показано ниже
ОШИБКА:
TaskSetManager:66 - Lost task 33.0 in stage 18.0 : java.io.IOException: Exception during execution of SELECT count(*) FROM "keyspaceRf2"." c_columnar" WHERE token("id", " year", " quarter") > ? AND token("id", " year", " quarter") <= ? ALLOW FILTERING: Cassandra failure during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded, 1 failed)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.com$datastax$spark$connector$rdd$CassandraTableScanRDD$$fetchTokenRange(CassandraTableScanRDD.scala:350)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD$$anonfun$17.apply(CassandraTableScanRDD.scala:367)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD$$anonfun$17.apply(CassandraTableScanRDD.scala:367)
at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:434)
at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440)
at com.datastax.spark.connector.util.CountingIterator.hasNext(CountingIterator.scala:12)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.datastax.driver.core.exceptions.ReadFailureException: Cassandra failure during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded, 1 failed)
at com.datastax.driver.core.exceptions.ReadFailureException.copy(ReadFailureException.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.datastax.spark.connector.cql.SessionProxy.invoke(SessionProxy.scala:37)
at com.sun.proxy.$Proxy23.execute(Unknown Source)
at com.datastax.spark.connector.cql.DefaultScanner.scan(Scanner.scala:34)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.com$datastax$spark$connector$rdd$CassandraTableScanRDD$$fetchTokenRange(CassandraTableScanRDD.scala:342)
... 15 more
Что я здесь не так делаю?