Python 数据集小于内存的Dask内存错误

Python 数据集小于内存的Dask内存错误,python,memory,dask,large-data,bigdata,Python,Memory,Dask,Large Data,Bigdata,我试图在Python3中快速计算一个大数据集(745行x18048列)的相关矩阵。数据集最初是从一个50MB的netCDF文件读取的,经过一些操作,它达到了这个大小。所有数据都存储为float32s。因此,我计算出最终的相关矩阵应该在1.2GB左右,这应该很容易适合我的8GB RAM。使用pandas的数据帧及其方法,它可以在大约100分钟内计算出整个相关矩阵,因此可以进行计算 我仔细阅读了dask模块并决定实现它。然而,当我尝试使用相同的方法进行计算时,它几乎会立即运行到内存错误中,即使它应该

我试图在Python3中快速计算一个大数据集(745行x18048列)的相关矩阵。数据集最初是从一个50MB的netCDF文件读取的,经过一些操作,它达到了这个大小。所有数据都存储为float32s。因此,我计算出最终的相关矩阵应该在1.2GB左右,这应该很容易适合我的8GB RAM。使用pandas的数据帧及其方法,它可以在大约100分钟内计算出整个相关矩阵,因此可以进行计算

我仔细阅读了dask模块并决定实现它。然而,当我尝试使用相同的方法进行计算时,它几乎会立即运行到内存错误中,即使它应该适合内存。经过一些修改,我意识到它甚至在一个相对较小的1000 x 1000数据集上失败。下面还有什么导致这个错误的原因吗?我已将我的代码张贴在下面:

import dask.dataframe as ddf
# prepare data in dataframe called df
daskdf = ddf.from_pandas(df, chunksize=1000)
correlation = daskdf.corr()
correlation.compute()
下面是错误跟踪:

Traceback (most recent call last):
  File "C:/Users/mughi/Documents/College Stuff/Project DIVA/Preprocessing Data/DaskCorr.py", line 36, in <module>
    correlation.compute()
  File "C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site-packages\dask\base.py", line 94, in compute
    (result,) = compute(self, traverse=False, **kwargs)
  File "C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site-packages\dask\base.py", line 201, in compute
    results = get(dsk, keys, **kwargs)
  File "C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site-packages\dask\threaded.py", line 76, in get
    **kwargs)
  File "C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site-packages\dask\async.py", line 500, in get_async
    raise(remote_exception(res, tb))
dask.async.MemoryError: 

Traceback
---------
  File "C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site-packages\dask\async.py", line 266, in execute_task
    result = _execute_task(task, data)
  File "C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site-packages\dask\async.py", line 247, in _execute_task
    return func(*args2)
  File "C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site-packages\dask\dataframe\core.py", line 3283, in cov_corr_chunk
    keep = np.bitwise_and(mask[:, None, :], mask[:, :, None])
回溯(最近一次呼叫最后一次):
文件“C:/Users/mughi/Documents/College Stuff/Project DIVA/Preprocessing Data/DaskCorr.py”,第36行,在
correlation.compute()
文件“C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site packages\dask\base.py”,第94行,在compute中
(结果,)=compute(自我,遍历=False,**kwargs)
文件“C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site packages\dask\base.py”,第201行,在compute中
结果=获取(dsk、键、**kwargs)
文件“C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site packages\dask\threaded.py”,第76行,在get中
**kwargs)
文件“C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site packages\dask\async.py”,第500行,在get\u async中
raise(远程_异常(res,tb))
dask.async.MemoryError:
回溯
---------
文件“C:\Users\mughi\AppData\Local\Programs\Python\36\lib\site packages\dask\async.py”,第266行,在执行任务中
结果=_执行_任务(任务、数据)
文件“C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site packages\dask\async.py”,第247行,在执行任务中
返回函数(*args2)
文件“C:\Users\mughi\AppData\Local\Programs\Python\Python36\lib\site packages\dask\dataframe\core.py”,第3283行,cov\u corr\u chunk
keep=np.按位_和(掩码[:,无,:],掩码[:,:,无])

谢谢大家!

我建议您只使用NumPyPandas,因为它可能会在没有警告的情况下复制您的数据。有没有办法阻止Pandas这样做,或者我必须坚持numpy的关联实现?