【发布时间】:2018-04-13 00:50:43
【问题描述】:
我正在将一个巨大的 csv (18GB) 加载到内存中,并注意到 R 和 Python 之间存在很大差异。这是在 AWS ec2 r4.8xlarge which has 244 Gb of memory 上。显然这是一个极端的例子,但这个原则也适用于真实机器上的较小文件。
使用pd.read_csv 时,我的文件需要大约 30 分钟才能加载并占用 174Gb 的内存。基本上如此之多,以至于我无法用它做任何事情。相比之下,data.table 包中的 R 的 fread() 耗时约 7 分钟,内存仅为约 55Gb。
为什么 pandas 对象比 data.table 对象占用这么多内存?此外,为什么从根本上说 pandas 对象比磁盘上的文本文件大 10 倍?首先,.csv 并不是一种特别有效的数据存储方式。
【问题讨论】:
-
@RobertMc 不是熊猫
-
您使用的是
fread的 1.10.5,它是新的,在开发中,但尚未在 CRAN 上?也可以试试paratext。 -
@roganjosh
fread在开发(即 1.10.5)中要快得多,这就是我问的原因。不,我并不是说它阅读不正确。 OP 还询问速度和内存使用情况。 -
没错,我正在尝试将其加载到内存中以在其上运行 sklearn 模型。我从中获取的数据库输出了这个巨大的 .tsv,这就是我遇到这个问题的原因。没错,将其转换为另一种格式(hdf、parquet、feather 等)可能是最好的,我只是想让管道尽可能简单。旁注:使用 data.table 将其读取到 R,将其写入羽毛,然后将羽毛读入 Python 总共需要大约 12 分钟,而直接使用 pd.read_csv 到 Python 需要大约 30 分钟。这对我来说太疯狂了。
标签: python r pandas csv data.table