Spark 3.0 - 使用 .save() 或 .saveAsTable() 保存时的读取性能

Posted

技术标签:

【中文标题】Spark 3.0 - 使用 .save() 或 .saveAsTable() 保存时的读取性能【英文标题】:Spark 3.0 - Reading performance when saved using .save() or .saveAsTable() 【发布时间】:2021-01-11 10:50:11 【问题描述】:

我想知道这两个命令之间的性能(读取时)是否存在差异?:

df.write.format('parquet').partitionBy(xx).save('/.../xx.parquet') df.write.format('parquet').partitionBy(xx).saveAsTable('...')

我知道对于分桶问题不会出现,因为它仅用于托管表 (saveAsTable()) ;但是,我对分区是否有特权方法感到有些困惑。

【问题讨论】:

【参考方案1】:

我试图在一个小数据框上通过实验找到答案,结果如下:

ENV = Databricks Community edition 
      [Attached to cluster: test, 15.25 GB | 2 Cores | DBR 7.4 | Spark 3.0.1 | Scala 2.12]

sqlContext.setConf( "spark.sql.shuffle.partitions", 2)
spark.conf.set("spark.sql.adaptive.enabled","true")

df.count() = 693243

结果:

正如预期的那样,使用 .saveAsTable() 编写的时间有点长,因为它必须执行一个专用的“CreateDataSourceTableAsSelectCommand”来实际创建表。 然而,在这个简单的例子中,观察到有利于 .saveAsTable() 的差异几乎是 x10 的一个因素是很有趣的。 如果有人有能力这样做,我会非常有兴趣在更大范围内比较结果,并了解幕后发生的事情。

【讨论】:

以上是关于Spark 3.0 - 使用 .save() 或 .saveAsTable() 保存时的读取性能的主要内容,如果未能解决你的问题,请参考以下文章

调试save()返回false CakePHP 3.0

vue-cli3.0 使用px2rem 或 postcss-plugin-px2rem

无法使用 Spark cassandra 连接器 1.5.0 连接 Cassandra 3.0

如何使用Spark SQL 的JDBC server

Spark 3.0 的新特性了解吗?

spark--环境搭建--6.Spark1.3.0集群搭建