[英]awswrangler write parquet dataframes to a single file
我正在創建一個無法直接放入內存的非常大的文件。 所以我在 S3 中創建了一堆小文件,並正在編寫一個可以讀取這些文件並合並它們的腳本。 我正在使用 aws wrangler 來執行此操作
我的代碼如下:
try:
dfs = wr.s3.read_parquet(path=input_folder, path_suffix=['.parquet'], chunked=True, use_threads=True)
for df in dfs:
path = wr.s3.to_parquet(df=df, dataset=True, path=target_path, mode="append")
logger.info(path)
except Exception as e:
logger.error(e, exc_info=True)
logger.info(e)
問題是 w4.s3.to_parquet 創建了很多文件,而不是寫入一個文件,我也無法刪除 chunked=True ,否則我的程序會因 OOM 而失敗
我如何使它在 s3 中寫入單個文件。
AWS Data Wrangler 正在寫入多個文件,因為您已指定dataset=True
。 只要您指定完整path
刪除此標志或切換到False
就可以解決問題
我不相信這是可能的。 @Abdel Jaidi 建議不起作用,因為append=True
要求數據集為真,否則會引發錯誤。 我相信在這種情況下, append
更多的是通過將新文件添加到同一文件夾中來“追加”Athena 或 Glue 中的數據。
我也不認為這對於一般的鑲木地板來說是不可能的。 根據this SO post ,在本地文件夾中是不可能的,更不用說S3了。 添加到這個鑲木地板是壓縮的,我認為在不將其全部加載到 memroy 的情況下將一行添加到壓縮文件中並不容易。
我認為唯一的解決方案是獲得一個可以處理這個問題的強大的 ec2 實例。
我面臨着類似的問題,我想我將遍歷所有小文件並創建更大的文件。 例如,您可以將服務器數據幀附加在一起,然后重寫它們,但除非您獲得一台具有足夠內存的計算機,否則您將無法返回到一個鑲木地板文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.