首页 > 解决方案 > Spark 3.0 - 使用 .save() 或 .saveAsTable() 保存时的读取性能

问题描述

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

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

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

标签: pysparkapache-spark-sql

解决方案


我试图在一个小数据帧上找到一个实验性的答案,结果如下:

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 是很有趣的。如果有人有能力这样做,我会非常有兴趣在更大范围内比较结果,并了解幕后发生的事情。

在此处输入图像描述


推荐阅读