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

Pyspark Spark 3.0-使用.save()或.saveAsTable()保存时的读取性能,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我想知道这两个命令之间的性能(阅读时)是否有差异 df.write.format('parquet').partitionBy(xx).save('/…/xx.parquet') df.write.format('parquet').partitionBy(xx).saveAsTable('…') 我知道对于bucketing,这个问题不会出现,因为它只用于托管表(saveAsTable());然而,对于分区是否有特权的方法,我有点困惑。我试图在一个小数据帧上实验性地找到答案,结果如下: ENV

我想知道这两个命令之间的性能(阅读时)是否有差异

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


我知道对于bucketing,这个问题不会出现,因为它只用于托管表(saveAsTable());然而,对于分区是否有特权的方法,我有点困惑。

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

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()进行写入要长一点,因为它必须执行专用的“CreateDataSourceTableAssetSelect命令”才能实际创建表。 然而,在这个简单的示例中,当以将近x10的倍数读取.saveAsTable()时,观察到这种差异是很有趣的。 如果有人有能力的话,我非常有兴趣在更大的范围内比较结果,并了解引擎盖下发生了什么