Spark DataFrame写入S3是否先写入EBS?相关机制问询
Spark DataFrame写入S3(Parquet格式)的后台机制解析
针对你使用PySpark 2.4.7 + EMR 5.32.0的环境,相关运行机制如下:
是否先存储在本地EBS卷再推送到S3?
是的。Spark的每个Executor会先在本地EBS卷上生成对应数据分片的Parquet临时文件——本地磁盘IO远快于直接写入S3,这种方式能大幅提升写入性能。待本地文件生成完成后,Executor再将这些文件批量上传到指定的S3路径。推送成功后本地EBS卷上的文件是否会被删除?
会自动删除。当Executor确认文件成功上传到S3后,会立即清理本地的临时文件;如果上传失败,部分临时文件可能会保留用于重试,但最终写入任务成功完成后,所有本地临时文件都会被清理。本地文件的默认路径是什么?
在EMR 5.32.0环境下,默认路径为/mnt/tmp/spark-<随机字符串>(EMR通常将EBS卷挂载到/mnt目录作为临时存储),每个任务的临时文件会放在对应的子目录中。如果/mnt/tmp不可用,会 fallback 到系统默认的/tmp/spark-<随机字符串>。设置本地临时路径的Spark配置属性是什么?
通过spark.local.dir配置项指定。你可以在提交作业时通过--conf spark.local.dir=/your/custom/tmp/path来修改,也可以在Spark的配置文件(如spark-defaults.conf)中设置该属性。
你提供的示例代码
df.repartition(prtn_col[0]).write.format(self.config_dict['output_format']).mode('overwrite').partitionBy(*prtn_col).save(path)
内容的提问来源于stack exchange,提问作者Venkatesan Muniappan
相关产品推荐
相关产品推荐

