PySpark上传到Databricks上运行的S3的速度非常慢

时间:2019-05-06 16:31:01

标签: apache-spark amazon-s3 pyspark parquet databricks

我的ETL脚本从关系数据库中读取三个表,通过PySpark执行一些操作,并将其上传到我的S3存储桶(与S3a一起)。

以下是进行上传的代码:

dataframe.write.mode("overwrite").partitionBy("dt").parquet(entity_path)

我大约有200万行写在按日期('dt')划分的拼花文件中的S3上。

我的脚本花费了两个多小时才能将此文件上传到S3(这非常慢),并且它在集群中的Databricks上运行:

 3-8 Workers: 366.0-976.0 GB Memory, 48-128 Cores, 12-32 DBU

我已经得出结论,上传中存在问题,我不知道发生了什么。

更新: 使用repartition('dt')可以将执行时间减少到20分钟左右。这对我有帮助,但是我认为它应该在更短的时间内执行。

2 个答案:

答案 0 :(得分:0)

正如我对这个问题的更新一样,添加render :js => "window.location = '/recipes/#{@recipe.id}'" 的执行时间减少到了13至20分钟。

repartition('dt')

经过一些分析,我得出结论,集群正在处理序列化的上载,并且文件在S3中按日期升序依次上载。

因此,添加分区后,群集将重组其节点之间的数据并随机上传文件,从而使上传速度更快(从3小时到20分钟)。

此解决方案对我有所帮助。如果有人知道更好的方法或有任何贡献,我将很高兴知道。

答案 1 :(得分:0)

更多工人将为您提供帮助 因为一个工人(工作)只能有一个s3连接