Я попытался сравнить cassandra save для таблицы с 30 000 записей для RDD и DataSet.Я обнаружил, что сохранение набора данных было в 10 раз медленнее по сравнению с RDD.Таблица имеет 4 ключа разделения.
DSE Version :5.1.7
Spark version :2.0.1
Nodes:6( 20 cores each 6g)
Using Spark Standalone
Мы использовали следующие конфигурации свечей:
- spark.scheduler.listenerbus.eventqueue.size = 100000
- spark.locality.wait = 1
- spark.dse.continuous_paging_enabled = false
- spark.cassandra.input.fetch.size_in_rows = 500
- spark.cassandra.connection.keep_alive_ms =10000
- spark.cassandra.output.concurrent.writes = 2000
- num-cpu-cores = 48
- память на узел = 3g
- spark.executor.cores = 3
- spark.cassandra.output.ignoreNulls = true
- spark.cassandra.output.throughput_mb_per_sec = 10
- spark.serializer = org.apache.spark.serializer.KryoSerializer
- spark.cassandra.connection.local_dc = dc1
- spark.cassandra.connection.compression = LZ4
- spark.cassandra.connection.connections_per_executor20
Ниже приведен пример кода для того же:
val sparkSession = SparkSession.builder().config(conf).getOrCreate()
import sparkSession.implicits._
val RDD1 = sc.cassandraTable[TableName]("keySpace1", "TableName")
.where("id =?,id)
RDD1.saveToCassandra("keySpace1", "TableName")
var DS1 = sparkSession.read
.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> "TableName", "keyspace" ->"keySpace1"))
.load()
.where("id ='"+ id +"'").as[CaseClassModel]
DS1.write.format("org.apache.spark.sql.cassandra")
.mode(SaveMode.Append).option("table", "TableName1")
.option("keyspace", "KeySpace1")
.save()