在 AWS s3 中使用
insertInto
时,数据最初会写入 .spark-staging
文件夹,然后一次批量移动(假重命名)到实际位置,每次 10 个文件。将暂存数据 10 移动 10 的速度很慢。
有什么办法可以增加它的并行度吗?
这是 s3 Committer 的问题,请检查文档
https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-optimized-commit-protocol.html
你应该尽量避免使用
.option("partitionOverwriteMode", "dynamic")
如果您的数据是例如按日期分区,您应该在输出路径中包含日期
所以改为
ds.write.option("partitionOverwriteMode", "dynamic").partitionBy(date).parquet("s3://baspath/")
做
ds.write.parquet(s"s3://baspath/date=$someDate/")