我有非常大的文本文件(大约 80G)。文件仅包含数字(整数+ float )并且有 20 列。现在我必须分析每一列。通过分析,我的意思是,我必须对每一列进行一些基本计算,例如求均值、绘制直方图、检查条件是否满足等。我正在阅读如下文件
with open(filename) as original_file:
all_rows = [[float(digit) for digit in line.split()] for line in original_file]
all_rows = np.asarray(all_rows)
在此之后,我对特定列进行所有分析。我使用“良好”的配置服务器/工作站(具有 32GB RAM)来执行我的程序。问题是我无法完成我的工作。我几乎等了一天才完成该程序,但它在 1 天后仍在运行。后来我不得不手动杀死它。我知道我的脚本是正确的,没有任何错误,因为我已经在较小的文件(大约 1G)上尝试过相同的脚本,并且效果很好。
我最初的猜测是它会有一些内存问题。有什么办法可以做这样的工作吗?一些不同的方法或其他方式?
我尝试将文件拆分成更小的文件大小,然后像下面这样在循环中单独分析它们
pre_name = "split_file"
for k in range(11): #There are 10 files with almost 8G each
filename = pre_name+str(k).zfill(3) #My files are in form "split_file000, split_file001 ..."
with open(filename) as original_file:
all_rows = [[float(digit) for digit in line.split()] for line in original_file]
all_rows = np.asarray(all_rows)
#Some analysis here
plt.hist(all_rows[:,8],100) #Plotting histogram for 9th Column
all_rows = None
我已经在一堆较小的文件上测试了上面的代码并且它工作正常。然而,当我在大文件上使用时,它又是同样的问题。有什么建议么?还有其他更清洁的方法吗?
最佳答案
对于如此冗长的操作(当数据不适合内存时),使用像 dask ( http://dask.pydata.org/en/latest/ ) 这样的库可能很有用,尤其是 dask.dataframe.read_csv
来读取数据,然后像在 pandas 库(另一个值得一提的有用包)中那样执行您的操作。
关于python - 仅使用 32GB 内存分析 80GB 文件中的庞大数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32861069/