Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark PySpark上传到运行在Databricks上的S3的速度非常慢_Apache Spark_Amazon S3_Pyspark_Parquet_Databricks - Fatal编程技术网

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

Apache spark PySpark上传到运行在Databricks上的S3的速度非常慢,apache-spark,amazon-s3,pyspark,parquet,databricks,Apache Spark,Amazon S3,Pyspark,Parquet,Databricks,我的ETL脚本从关系数据库中读取三个表,通过PySpark执行一些操作,并将其上传到我的S3存储桶(使用S3a) 以下是进行上传的代码: dataframe.write.mode("overwrite").partitionBy("dt").parquet(entity_path) 我在S3上写了大约200万行,它们是按日期('dt')划分的拼花文件 我的脚本需要两个多小时才能上传到S3(速度非常慢),它在集群中的DataRicks上运行,具有: 3-8 Workers: 366.0-976

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

以下是进行上传的代码:

dataframe.write.mode("overwrite").partitionBy("dt").parquet(entity_path)
我在S3上写了大约200万行,它们是按日期('dt')划分的拼花文件

我的脚本需要两个多小时才能上传到S3(速度非常慢),它在集群中的DataRicks上运行,具有:

 3-8 Workers: 366.0-976.0 GB Memory, 48-128 Cores, 12-32 DBU
我的结论是,上传中的问题,我不知道发生了什么

更新:
使用
重新分区('dt')
将执行时间减少到约20分钟。这对我很有帮助,但我认为它应该在更短的时间内执行。

正如我对这个问题所做的更新,添加了
重新分区('dt')
执行时间减少到了约13到20分钟

dataframe.write.mode("overwrite").partitionBy("dt").parquet(entity_path)
经过一些分析,我得出结论,集群正在处理序列化的上传,并且文件正在按asc顺序在S3中按日期逐个上传

因此,添加重新分区后,集群会在节点之间重新组织数据,并随机上传文件,从而加快上传速度(从~3小时到20分钟)

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

更多的员工将提供帮助
因为一个worker(job)只能有一个s3连接

有没有线索说明为什么要一个接一个地上传文件?@Lucas您是否添加了
repartition('dt')
以及
partitionBy
子句?