繁体   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