首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更快地为S3编写Pyspark

更快地为S3编写Pyspark
EN

Stack Overflow用户
提问于 2022-06-24 08:17:51
回答 1查看 128关注 0票数 0

我正在使用Pyspark从mysql中提取数据,并试图使用pyspark上传相同的数据。虽然这样做,它需要5-7分钟来上传一块100 K的记录。

这一过程将需要几个月的数据拉出,因为源中大约有3,108,700,000 recs。是否有更好的方法可以改善S3上传过程。

注意:数据拉取一次100 K只需20-30秒,这仅仅是S3上传造成的问题。

下面是我如何为S3编写DF。

代码语言:javascript
复制
df = spark.read.format("jdbc").
     option('url', jdbcURL).
     option('driver', driver).
     option('user', user_name).
     option('password', password).
     option('query', data_query).load()



output_df = df.persist()
output_df.repartition(1).write.mode("overwrite").parquet(target_directory)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-24 12:14:01

修复是一个很好的步骤,因为将大文件写入S3比编写小文件要好。

持久化会减慢您的速度,因为您将所有文件写入S3。因此,您要将数据写入S3两次。

S3是为大、慢、廉价的存储而制作的。它不是用来快速移动数据的。如果您想迁移数据库AWS有这样的工具并且值得研究它们。即使这样,您也可以将文件移动到S3中。

S3写入存储桶并通过文件路径确定存储桶,它使用尾变化来分配&自动拆分存储桶。(/heres/some/variation/at/the/tail1 1,/heres/some/variation/at/the/tail1 2)水桶是这里的瓶颈。要获得多个存储桶,请将变量文件保留在文件路径的开头。(/ head 1/variation/is捷/,/head 2/variation/is捷/)

  1. 尝试删除persist。(至少认为cache()是一种更便宜的选择。
  2. 保持重新分区
  3. 改变文件路径的头以分配更多的桶。
  4. 考虑使用rest多部分上传将数据推入S3的重新设计。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72740999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档