pandas pytables 附加:性能和文件大小的增加

2023-12-10

我有500多个PyTables每个存储大约包含 300Mb 的数据。我想使用 pandas 将这些文件合并到一个大商店中append如下面的代码所示。

def merge_hdfs(file_list, merged_store):
    for file in file_list:
        store = HDFStore(file, mode='r')
        merged_store.append('data', store.data)
        store.close()

追加操作非常慢(追加单个存储最多需要 10 分钟)merged_store),奇怪的是文件大小merged_store每个附加存储似乎都会增加 1Gb。

我已经指出了预期行的总数,根据文档应该可以提高性能,并且已阅读提高 pandas (PyTables?) HDF5 表写入性能我原本期望写入时间较长,但每 300Mb 几乎需要 10 分钟,似乎太慢了,而且我无法理解为什么会增加大小。

我想知道我是否错过了什么?

如需了解更多信息,请参阅以下 500 个 PyTable 之一的描述。

/data/table (Table(272734,)) ''
  description := {
  "index": Int64Col(shape=(), dflt=0, pos=0),
  "values_block_0": Float64Col(shape=(6,), dflt=0.0, pos=1),
  "id": StringCol(itemsize=11, shape=(), dflt='', pos=2),
  "datetaken": Int64Col(shape=(), dflt=0, pos=3),
  "owner": StringCol(itemsize=15, shape=(), dflt='', pos=4),
  "machine_tags": StringCol(itemsize=100, shape=(), dflt='', pos=5),
  "title": StringCol(itemsize=200, shape=(), dflt='', pos=6),
  "country": StringCol(itemsize=3, shape=(), dflt='', pos=7),
  "place_id": StringCol(itemsize=18, shape=(), dflt='', pos=8),
  "url_s": StringCol(itemsize=80, shape=(), dflt='', pos=9),
  "url_o": StringCol(itemsize=80, shape=(), dflt='', pos=10),
  "ownername": StringCol(itemsize=50, shape=(), dflt='', pos=11),
  "tags": StringCol(itemsize=505, shape=(), dflt='', pos=12)}
  byteorder := 'little'
  chunkshape := (232,)

这基本上就是答案here,我最近回答过。

最重要的是,您需要关闭索引store.append('df',df,index=False)。创建商店时,然后在最后对其进行索引。

此外,合并表时也关闭压缩。

索引是一项相当昂贵的操作,如果我没记错的话,只使用单个处理器。

最后,确保您创建了合并 withmode='w'因为所有后续操作都是追加的,并且您希望从一个干净的新文件开始。

我也不会指定chunksize预先。相反,在创建最终索引后,使用以下命令执行压缩ptrepack并指定chunksize=auto它会为你计算它。我认为这不会影响写入性能,但会优化查询性能。

您可以尝试调整chunksize参数为append(这是写入块大小)也为更大的数字。

显然,请确保每个附加表具有完全相同的结构(如果不是这种情况,则会引发错误)。

我创建这个问题是为了增强“内部”执行此操作的功能:https://github.com/pydata/pandas/issues/6837

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas pytables 附加:性能和文件大小的增加 的相关文章

随机推荐

  • 在 C 中转换向量的 C++ 实现

    我用 C 编写了以下代码 但是发现我必须将其转换为 C 我不是 C 甚至 C 程序员 请帮忙 有人可以帮我将此方法更改为 C 指令 特别是向量实现 以下将无法编译我已经删除了复杂性以保持简单 感谢期待 declspec dllexport
  • 编码的共享 URI 中的站点无效

    我尝试使用 Microsoft Graph 从共享链接中提取一些文件 但是 当我尝试使用 Microsoft Graph Explorer 执行此操作时 它返回 error code invalidRequest message The s
  • 我无法全局安装nodemon,“nodemon”无法识别

    我想使用 nodemon 来监视我的 node js 应用程序 然后执行下一行命令 npm install g nodemon or npm install nodemon g 当我移动到我的应用程序文件夹并尝试 nodemon app j
  • 引用计数降至零后多久调用 __del__ ?

    引用计数达到零后多久 del 方法调用 该语言是否承诺在任何其他使用代码执行之前它会立即完成 或者每个实现都可以做它喜欢的事情 可能会延迟对 del 任意长 请忽略程序即将退出时的情况 我认为这意味着给定块中的最后一条语句已完成 并且堆栈为
  • 以高于屏幕分辨率的 dpi 打印表单

    Problem 我们需要有关如何使用 WinForms 自动缩放到不同 DPI 的功能的帮助 以便我们能够以 600 dpi 而不是屏幕 DPI 打印表单 对于 所见即所得 打印 我们只是简单地使用布局精美的窗口并打印它 关闭滚动条和按钮等
  • pandas drop_duplicates 不可散列类型:'numpy.ndarray'、'set' 和 'list'

    我正在尝试使用drop duplicates在a的一列上dataframe A len 1 2 2 1 2 2 3 1 4 5 2 4 5 2 结果dataframe应该看起来像 A len 1 2 2 3 1 4 5 2 我努力了df d
  • AffineTransform 截断图像

    我有一个图像 我必须将其旋转 45 90 135 180 度 我在做什么 try BufferedImage src ImageIO read new File src png double ang Math toRadians 90 Af
  • Imagick 制作动画 GIF 而不是动画?

    我正在向 imagick 发送图像 当它是动画 gif 时 它会删除动画并留下单个静态图像 这是因为调整大小代码吗 或者它是 imagick 库中固有的东西 下面是我的代码 这里有什么问题吗 if isset FILES image all
  • 在 Windows 上通过 putty 通过 ssh 编写脚本

    我需要编写从 Windows 机器恢复 Linux 机器的 mysql 脚本 我有 putty 并且我知道它有 ssh 功能 这是我所拥有的 C Progra 1 Putty putty exe ssh root 10 1 2 3 mysq
  • 在移动设备上进行离线反向地理编码的技术?

    我正在开发一个移动地图应用程序 目前是 iOS 最终是 Android 我正在努力解决如何在不使用在线服务的情况下最好地支持从纬度 经度到国家 州的反向地理编码 Apple 的反向地理编码 API 依赖于 Google 作为后端 并且在连接
  • 在商店后使用启动器时如何防止应用程序重新启动?

    在我使用应用程序商店启动它后 使用启动器启动它时 我的 Android 应用程序正在重新启动 反之亦然 有什么办法可以防止这种情况发生吗 重新启动是指活动堆栈丢失 这很重要 因为我们的用户会在一个小时左右的时间内间歇性地设置并返回应用程序中
  • 如何正确重写 Viewgroup 类中的 onLayout 方法

    我有一个从视图组类扩展的类 现在我知道在 onLayout 中你必须调用每个孩子的布局方法 这里的问题是应该将什么值传递给子布局 在我看来 我膨胀了一个 xml 并将其附加到此类 宽度和高度在 xml 中定义 在 onlayout 中 我得
  • 在 python watchdog 中并行处理多个 onCreated 事件

    我正在尝试检测目录上是否创建了任何新文件 如果创建 我想处理它 需要 10 分钟才能给出输出 同时其他新文件也会在该文件夹中创建 我如何使用多进程注册看门狗的 oncreated 以便每次创建文件时都会生成一个新进程 而不是等待一个文件完成
  • 使用 Guzzle PHP 将文件分块上传到 URL 端点

    我想使用 guzzle 将文件分块上传到 URL 端点 我应该能够提供 Content Range 和 Content Length 标头 使用 php 我知道我可以使用 define CHUNK SIZE 1024 1024 Size i
  • XSLT 转换为 xml,按键分组

    我在编写 xsl 将 xml 转换为 raport 版本时遇到问题 看起来像这样
  • 使用反射将属性动态转换为其实际类型(其中实际类型是通用的)

    这是一个略有不同的问题here 我将相同的代码修改为我的需要 如下所示 using System using System Collections Generic using System Linq using System Reflect
  • 由于类型转换而未使用索引?

    由于对特定表进行全表扫描 我有一个进程表现不佳 我计算了统计数据 重建了现有索引并尝试为此表添加新索引 但这并没有解决问题 隐式类型转换可以停止使用索引吗 其他原因又如何呢 全表扫描的成本比索引查找的成本大约高 1000 EDIT SQL语
  • 从 parse.com 检索图像

    我不知道这是否可能 但我认为这是可能的 但我不知道该怎么做 我只是想从 parse com 加载图像 就像从 parse com 检索对象一样 我应该像从 parse com 获取字符串一样进行操作吗 我刚刚找到了如何在解析时保存图像 但没
  • 如何制作输出目录选择面板?

    您好 我正在尝试制作一个窗格 在我的计算机中显示类似 Windows 资源管理器的内容 当用户完成操作后 当他想要将编辑后的图像保存在磁盘上的特定位置时 他可以轻松地从该窗格中选择目录 我想设计这样的东西 可以做类似的事情吗 我的图片编辑器
  • pandas pytables 附加:性能和文件大小的增加

    我有500多个PyTables每个存储大约包含 300Mb 的数据 我想使用 pandas 将这些文件合并到一个大商店中append如下面的代码所示 def merge hdfs file list merged store for fil