DataFrame записывает в 10 раз медленнее, чем RDD, сохраняет в Cassandra в искре - PullRequest
0 голосов
/ 24 апреля 2018

Я попытался сравнить 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

Мы использовали следующие конфигурации свечей:

  1. spark.scheduler.listenerbus.eventqueue.size = 100000
  2. spark.locality.wait = 1
  3. spark.dse.continuous_paging_enabled = false
  4. spark.cassandra.input.fetch.size_in_rows = 500
  5. spark.cassandra.connection.keep_alive_ms =10000
  6. spark.cassandra.output.concurrent.writes = 2000
  7. num-cpu-cores = 48
  8. память на узел = 3g
  9. spark.executor.cores = 3
  10. spark.cassandra.output.ignoreNulls = true
  11. spark.cassandra.output.throughput_mb_per_sec = 10
  12. spark.serializer = org.apache.spark.serializer.KryoSerializer
  13. spark.cassandra.connection.local_dc = dc1
  14. spark.cassandra.connection.compression = LZ4
  15. 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()

1 Ответ

0 голосов
/ 25 апреля 2018

Поскольку оба метода Dataframe и RDD используют один и тот же базовый код сохранения, маловероятно, что вы увидите столь резкое различие, если только затраты на преобразование в типы DF не будут очень очень высокими.В наших собственных тестах на миллиардах строк мы видим разницу в скорости всего на несколько процентов.

Хотя 30 тыс. Записей - это очень небольшое количество, и любое количество накладных расходов может стать актуальным, я думаю, что наиболее вероятной причиной будетпоиск в предложении where по-разному интерпретируется в коде RDD и DF.Я бы проверил, чтобы убедиться, что он правильно вставлен в код DF (см. explain для загрузки DF.)

...