如何根据字节大小拆分熊猫数据帧

Posted

技术标签:

【中文标题】如何根据字节大小拆分熊猫数据帧【英文标题】:How to split pandas dataframe based on byte size 【发布时间】:2017-06-22 23:49:31 【问题描述】:

我想将数据从一个巨大的 pandas DataFrame 插入到 Redshift。但是,当我尝试执行插入语句时,出现以下错误:

错误:语句太大。语句大小:152681090 字节。 最大允许:16777216 字节

为了克服这个问题,我想将数据帧拆分为允许大小内的块,并为每个块执行单独的插入语句。如何将数据帧划分为 16777216 字节限制内的行块?

如果不可能,有没有其他方法可以将如此大的数据帧中的数据插入到 Redshift 中?

谢谢!

【问题讨论】:

检查这个答案的行***.com/a/33368088/2027457 谢谢,我看到了。但我不知道我想要多少行。我只知道每个块最多应该有16777216字节。每行可能有不同的字节大小。 好的,您可以使用 to_sql 进行写入并在此处定义块大小,如下所示:data.to_sql('df', engine, chunksize=10000) 或者你可以遍历每一行并添加到你的红移 pandas.pydata.org/pandas-docs/stable/io.html#io-sql 【参考方案1】:
DataFrame.to_sql(name, con, flavor=None, schema=None, if_exists=’fail’, index=True, index_label=None, chunksize=None, dtype=None)[source]

source to documentation

您可以根据文档指定块大小,以便使用 5-10k 并查看其工作原理。

chunksize : int, default None
If not None, then rows will be written in batches of this size at a time. If None, all rows will be written at once.

    另一个选择是使用这个包装器,所以中间是 s3: source code of the wrapper

    因此,如果您加载到现有表中,则可以按照以下步骤操作:来自 new_table(块数据表) 的数据插入到现有表中(已使用这种类型的 "temp" 表加载速度非常快,也进行了预处理,redshift 确实会在更新时创建临时表,这非常快)

附:如果您提供代码示例和数据,我可以旋转集群并提供详细结果,但当前信息将有助于解决 chunk 问题。

【讨论】:

以上是关于如何根据字节大小拆分熊猫数据帧的主要内容,如果未能解决你的问题,请参考以下文章

熊猫如何按间隔按列拆分数据帧

根据大小(mb/gb)读取 spark 数据帧

按大小拆分字符串(1024字节)

Netty学习3(学习笔记)

熊猫:保存到excel编码问题

根据索引的接近程度拆分熊猫数据框