【发布时间】:2020-08-24 14:56:21
【问题描述】:
我正在 Databricks 上运行一个笔记本,它创建分区的 PySpark 数据帧并将它们上传到 s3。有问题的表有 ~5,000 个文件,总大小约为 5 GB(需要以这种方式分区才能被 Athena 有效查询)。我的问题是,将文件写入 s3 似乎是顺序的而不是并行的,并且可能需要长达一小时。例如:
df.repartition("customer_id")
.write.partitionBy("customer_id")
.mode("overwrite")
.format("parquet")
.save("s3a://mybucket/path-to-table/")
我已经在 AWS 上使用以下配置启动了我的集群 (i3.xlarge):
spark.hadoop.orc.overwrite.output.file true
spark.databricks.io.directoryCommit.enableLogicalDelete true
spark.sql.sources.commitProtocolClass org.apache.spark.sql.execution.datasources.SQLHadoopMapReduceCommitProtocol
parquet.enable.summary-metadata false
spark.hadoop.fs.s3.maxRetries 20
spark.databricks.hive.metastore.glueCatalog.enabled true
spark.hadoop.validateOutputSpecs false
mapreduce.fileoutputcommitter.marksuccessfuljobs false
spark.sql.legacy.parquet.datetimeRebaseModeInRead CORRECTED
spark.hadoop.fs.s3.consistent.retryPeriodSeconds 10
spark.speculation true
spark.hadoop.fs.s3.consistent true
spark.hadoop.fs.s3.consistent.retryCount 5
在我有很多小文件需要快速写入 s3 的情况下,推荐的方法是什么?
【问题讨论】:
-
为什么你的数据集需要顺序写入而不是并行写入?性能来自并行(写入)操作。你有多少个集群节点?
标签: python amazon-s3 pyspark databricks aws-databricks