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

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

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

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

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

谢谢!

【问题讨论】:

  • 检查这个答案的行stackoverflow.com/a/33368088/2027457
  • 谢谢,我看到了。但我不知道我想要多少行。我只知道每个块最多应该有16777216字节。每行可能有不同的字节大小。
  • 好的,您可以使用 to_sql 进行写入并在此处定义块大小,如下所示:data.to_sql('df', engine, chunksize=10000)
  • 或者你可以遍历每一行并添加到你的红移

标签: python python-2.7 pandas amazon-redshift


【解决方案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.
  1. 另一个选择是使用这个包装器,所以中间是 s3source code of the wrapper

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

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

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 2016-11-16
    • 2017-01-29
    • 2019-04-13
    • 1970-01-01
    • 2019-05-29
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多