DataFrame写入比RDD慢10倍,保存到spark中的cassandra

时间:2018-04-24 17:30:12

标签: scala apache-spark spark-dataframe spark-cassandra-connector

我尝试比较一个包含30,000条RDD和DataSet记录的表的cassandra save。我发现与RDD相比,数据集保存速度慢了10倍。 该表有4个分区键。

Spark

我们使用了以下火花配置:

  1. spark.scheduler.listenerbus.eventqueue.size = 100000
  2. spark.locality.wait = 1
  3. spark.dse.continuous_paging_enabled =假
  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核芯= 48
  8. 存储器每次节点=3克
  9. spark.executor.cores = 3
  10. spark.cassandra.output.ignoreNulls =真
  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_executor_max = 20
  16. 以下是相同的示例代码:

     DSE Version :5.1.7
     Spark version :2.0.1
     Nodes:6( 20 cores each 6g)
     Using Spark Standalone
    

1 个答案:

答案 0 :(得分:3)

由于Dataframe和RDD方法都使用相同的底层保存代码,因此除非转换为DF类型的开销非常高,否则您不太可能看到如此显着的差异。在我们自己对数十亿行的测试中,我们发现速度差异只有几个百分点。

虽然30k记录是一个非常小的数量,任何数量的开销都可能变得相关,但我认为最可能的原因是在RDD和DF代码中where子句的查找方式不同。我会检查以确保它在DF代码中被正确推送(请参阅explain以获取DF负载。)