【发布时间】:2018-08-18 04:53:06
【问题描述】:
我正在尝试在我的计算机上加载具有 1.25 亿行的 .csv 大小为 4 GB 和 5 种类型的数据,这些数据具有以下功能:
- CPU:Intel Core 2 Duo E7200 @ 2.53 GHz
- 内存:8 GB DDR3 @ 1833 MHz
- 高清:500 GB 7200 转
- 操作系统:Ubuntu 16.04
当我运行这段代码时:
import dask.dataframe as dd
import numpy as np
dtypes = {'item_nbr':'int32', 'store_nbr':'int8', 'onpromotion':'bool' }
df_train = dd.read_csv('data/train.csv', dtype=dtypes, parse_dates=["date"],
converters={'unit_sales': lambda u: np.log1p(float(u)) if float(u) > 0 else 0},
usecols=[1, 2, 3, 4, 5]).compute()
我的电脑死机了,我需要重新启动它,有什么办法可以解决这个问题吗?
谢谢!
版本:
目前我正在尝试运行:df_train.unit_sales.map_partitions(np.log1p).compute()
我的电脑仍然冻结,那么,我怎样才能在不冻结我的电脑的情况下计算所有 1.25 亿行的对数?以及,如何检查调用计算是否安全?
【问题讨论】:
-
这并不奇怪。在您调用
.compute()的那一刻,您触发了将所有数据带入内存的计算。这可能会产生 MemoryError。通常,您应该考虑您想要的结果,看看您是否可以在过滤后对较小的数据集触发compute()。 -
也许您可以使用
nrows和skiprows逐块读取您的csv? -
是的,我可以使用 skiprows,但我想转换整个数据集,然后对其进行过滤。那么,使用 chunksize 是一个好的解决方案吗?并使用“for”函数迭代所有数据集?
-
你将如何保存你的输出?在计算结束时保存 4GB 文件可能会占用大量内存。如果结果要输入另一个计算并且它是可分块的,那是一种方法。
-
我需要先计算所有unit_sales的对数再进行转换,所以最终输出是机器学习预测估计器的结果。