我正在使用Pyspark从mysql中提取数据,并试图使用pyspark上传相同的数据。虽然这样做,它需要5-7分钟来上传一块100 K的记录。
这一过程将需要几个月的数据拉出,因为源中大约有3,108,700,000 recs。是否有更好的方法可以改善S3上传过程。
注意:数据拉取一次100 K只需20-30秒,这仅仅是S3上传造成的问题。
下面是我如何为S3编写DF。
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)发布于 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捷/)
persist。(至少认为cache()是一种更便宜的选择。https://stackoverflow.com/questions/72740999
复制相似问题