pyspark - Spark 3.0 - 使用 .save() 或 .saveAsTable() 保存时的读取性能
问题描述
我想知道这两个命令之间的性能(读取时)是否存在差异?:
df.write.format('parquet').partitionBy(xx).save('/.../xx.parquet')
df.write.format('parquet').partitionBy(xx).saveAsTable('...')
我知道对于分桶问题不会出现,因为它仅用于托管表 (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() 编写的时间要长一些,因为它必须执行专用的“CreateDataSourceTableAsSelectCommand”来实际创建表。然而,在这个简单的例子中,观察到有利于 .saveAsTable() 的差异几乎是 x10 是很有趣的。如果有人有能力这样做,我会非常有兴趣在更大范围内比较结果,并了解幕后发生的事情。
推荐阅读
- bash - GNU Parallel:给出关于执行时间的提示
- c++ - 为什么我得到一个编译器错误,虽然大小是恒定的?
- node.js - 运行 Heroku 应用程序未显示上传文件中的更改
- docker - Elasticsearch pod 未运行正在重新启动
- php - 如何在 PHP 的 Visual Studio Code 中选择包括 $ 在内的整个变量名?
- html - 如何创建一个内容覆盖我的滑块的 div?
- javascript - 无法在.env文件vue cli 3中指定url
- php - 使用连接到 mysql 的 php 变量更改样式表
- android - 匕首中的依赖组件引发错误
- asp.net-mvc-4 - 使用 Asp.net MVC 模型创建 HTML 表