出于安全考虑,我正在通过 nfs 操作多个文件。由于文件 I/O 速度较慢,处理某些内容非常痛苦。以下是对该问题的说明。
- 我在Python中使用pandas对数据进行简单的处理。所以我经常使用
read_csv()
和to_csv()
。 - 目前,写入 10GB csv 文件需要近 30 分钟,而读取需要 2 分钟。
- 我有足够的CPU内核(>20个内核(和内存(50G~100G(。
- 很难要求更多的带宽。
- 我需要经常以面向列的方式访问数据。例如,将有 100M 条记录包含 20 列(其中大多数是数字数据(。对于数据,我经常只读取 3~4 列值的所有 100M 记录。
- 我尝试过使用 HDF5,但它构造了一个更大的文件并消耗类似的时间来写入。它不提供面向列的 I/O。所以我放弃了这个选项。
- 我无法在本地存储它们。这将违反许多安全标准。实际上我正在虚拟机上工作,文件系统是通过 nfs 挂载的。
- 我反复阅读了几篇专栏。对于几列,没有。该任务类似于数据分析。
我可以考虑哪些方法? 在某些情况下,我使用 sqlite3 以简单的方式操作数据并将结果导出到 csv 文件中。我可以通过在 Python 中使用 sqlite3 加速 I/O 任务吗?我认为,如果它提供按列操作,这将是一个很好的解决方案。
两个选项:Pandas HDF5或DASK。
- 您可以使用 format='table' 查看 HDF5 格式。
HDFStore支持磁盘上的另一种PyTables格式,即表格式。 从概念上讲,表的形状非常类似于数据帧,具有行 和列。表可以追加到同一会话或其他会话中。 此外,还支持删除和查询类型操作。这 格式由 format='table' 或 format='t' 指定以追加或放置 或to_hdf。
- 您可以使用 dask read_csv.它仅在 execute(( 时读取数据
对于纯粹提高 IO 性能,我认为使用压缩格式的 hdf 是最好的。