我正在使用 pyspark 從 mysql DB 中提取資料,并嘗試使用 Pyspark 上傳相同的資料。這樣做時,上傳一大塊 100K 記錄大約需要 5-7 分鐘。
這個程序需要幾個月的時間來拉取資料,因為源中有大約 3,108,700,000 條記錄。有沒有更好的方法可以改進 S3 上傳程序。
注意:單次提取 100K 記錄的資料提取只需 20-30 秒,它只是 S3 上傳導致問題。
這是我將 DF 寫入 S3 的方式。
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)
uj5u.com熱心網友回復:
修復是一個很好的舉措,因為將大檔案寫入 S3 比寫入小檔案要好。
當您將所有檔案寫入 S3 時,Persist 會減慢您的速度。因此,您將資料寫入 S3 兩次。
S3 是為大型、緩慢、廉價的存盤而設計的。它不是為了快速移動資料而設計的。如果您想遷移資料庫,AWS 有相應的工具,值得研究一下。即使是這樣,您也可以將檔案移動到 S3 中。
S3 寫入存盤桶并通過檔案路徑確定存盤桶,它使用尾部變化來分配和自動拆分存盤桶。(/heres/some/variation/at/the/tail1,/heres/some/variation/at/the/tail2) 桶是你的瓶頸。要獲取多個存盤桶,請將變數檔案保留在檔案路徑的開頭。(/head1/variation/isfaster/,/head2/variation/isfaster/)
- 嘗試洗掉
persist. (至少考慮cache()作為一種更便宜的選擇。 - 保持重新磁區
- 改變檔案路徑的頭部以分配更多的桶。
- 考慮重新設計,通過 rest api 多部分上傳將資料推送到 S3。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/497639.html
