【发布时间】:2020-05-02 05:45:58
【问题描述】:
拼花位置是:
s3://mybucket/ref_id/date/camera_id/parquet-file
假设我有ref_id x3、date x 4、camera_id x 500,如果我像下面这样写拼花地板(使用partitionBy),我会得到3x4x500=6000 文件上传到S3。比只写几个文件到顶层bucket(没有多级前缀)要慢得多
最佳做法是什么?我的同事认为partitionBy 与 Hive 元存储/表一起使用是一件好事
df.write.mode("overwrite")\
.partitionBy('ref_id','date','camera_id')\
.parquet('s3a://mybucket/tmp/test_data')
【问题讨论】:
-
曾经遇到过这个问题,最终将最大分区数固定为 2...如果您使用的是 EMR,您可以先写入本地 HDFS,然后将数据复制到 S3。也尝试设置
spark.hadooop.mapreduce.fileoutputcommitter.algorithm.version=2以提高性能。 -
@blackbishop commit version=2 已应用
标签: scala apache-spark amazon-s3 apache-spark-sql parquet