gpt4 book ai didi

python - Pandas read_csv 在 NFS 上 super 慢

转载 作者:行者123 更新时间:2023-11-28 19:13:35 25 4
gpt4 key购买 nike

我有一个非常简单的脚本,它使用 pandas.parse_csv 方法来加载大型数据集。

import pandas as pd
import numpy as np

USE_COLUMNS = [0,1,2,11,13,14]

def parse_csv(filename):
df = pd.read_csv(filename,
header=None,
compression='bz2',
delim_whitespace=True,
dtype={11:np.float32, 13:np.float32, 14:np.float32},
skip_blank_lines=True,
skiprows=4,
parse_dates=[[1,2]],
usecols=USE_COLUMNS,
error_bad_lines=False,
infer_datetime_format=True,
iterator=True,
chunksize=100000,
low_memory=False,
engine='c')
return df

fname = 'test.log.bz2'
iter = parse_csv(fname)
df = pd.concat([chunk[chunk[14] > 60000] for chunk in iter])
print df

文件 test.log.bz2 压缩后为 1.1GB,未压缩时为 5+GB,它有 15 列,仅使用了其中一些列。在我的本地机器上,这个脚本需要大约 200 秒才能运行。但是在生产机器上它运行了 53 分钟(x16 减速)!我该如何解决这个问题?

在我的本地机器上,我使用的是 SATA SSD,而在生产机器上,NFS 支持的文件系统是唯一的选择。

我使用的是 pandas 版本 0.16.2。

我在本地机器上的 strace 下运行这个脚本,结果如​​下:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
57.09 0.038753 2 15618 mremap
18.83 0.012780 0 109476 munmap
14.81 0.010055 0 109669 mmap
3.44 0.002337 0 259922 read
2.10 0.001427 0 5549 4780 open
1.45 0.000987 1 713 brk

strace 生产环境结果:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
92.41 0.491816 46 10766 mremap
4.59 0.024412 7 3491 2814 open
0.76 0.004065 0 9897 read
0.75 0.003999 15 274 274 unlink
0.50 0.002652 3 974 838 stat
0.47 0.002498 1249 2 clone
0.35 0.001865 0 4659 munmap
------ ----------- ----------- --------- --------- ----------------
100.00 0.532200 37118 3997 total

最佳答案

我建议您在将数据加载到 pandas 之前预先过滤您的数据(使用标准工具:bzip2gawk):

bzip2 -dc /path/to/test.log.bz2 | gawk -F"," 'NR > 4 && $15 > 600000.0 {print}' > /path/to/test_filtered.log

这应该会更快并且消耗更少的内存

请注意 $15 而不是 chunk[14] - AWK 从 1 开始计算列数

之后,您可以简单地将预过滤的未压缩 CSV 加载到 pandas 中

PS 你可能还想 tune up你的 NFS

关于python - Pandas read_csv 在 NFS 上 super 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com