簡體   English   中英

awswrangler 將鑲木地板數據幀寫入單個文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM