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() 保存时的读取性能的主要内容,如果未能解决你的问题,请参考以下文章
vue-cli3.0 使用px2rem 或 postcss-plugin-px2rem