Python 当pandas CONTAINATE不用于相同的文件时,Dask CONTAINATE会导致内存错误

Python 当pandas CONTAINATE不用于相同的文件时,Dask CONTAINATE会导致内存错误,python,pandas,dask,Python,Pandas,Dask,我试图连接几个dask数据帧,但这会导致我所有的RAM都用光,并使我的环境(Google Colab)崩溃 我曾尝试与Dask连接,因为我听说Dask会对文件进行分区,以便更轻松地加载到内存中。然而,熊猫能够处理他的操作,而达斯克却不能 我使用Dask的原因是,当我试图保存熊猫数据帧时,我的环境崩溃了。所以我试图看看Dask是否能够在不崩溃的情况下保存我的数据,但我仍然坚持创建我的数据帧 combA = np.load(file2A.format(0) , allow_pickle=True)

我试图连接几个dask数据帧,但这会导致我所有的RAM都用光,并使我的环境(Google Colab)崩溃

我曾尝试与Dask连接,因为我听说Dask会对文件进行分区,以便更轻松地加载到内存中。然而,熊猫能够处理他的操作,而达斯克却不能

我使用Dask的原因是,当我试图保存熊猫数据帧时,我的环境崩溃了。所以我试图看看Dask是否能够在不崩溃的情况下保存我的数据,但我仍然坚持创建我的数据帧

combA = np.load(file2A.format(0) , allow_pickle=True)
combB = np.load(file2B.format(0), allow_pickle=True )
combC = np.load(file2C.format(0), allow_pickle=True )
combD = np.load(file2D.format(0) , allow_pickle=True)
combE = np.load(file2E.format(0) , allow_pickle=True )
combF = np.load(file2F.format(0), allow_pickle=True )

dfAllA = dd.from_pandas(pd.DataFrame(combA), npartitions=10)
dfAllB = dd.from_pandas(pd.DataFrame(combB), npartitions=10)
dfAllC = dd.from_pandas(pd.DataFrame(combC), npartitions=10)
dfAllD = dd.from_pandas(pd.DataFrame(combD), npartitions=10)
dfAllE = dd.from_pandas(pd.DataFrame(combE), npartitions=10)
dfAllF = dd.from_pandas(pd.DataFrame(combF), npartitions=10)

dfAllT = dd.concat([dfAllA, dfAllB, dfAllC, dfAllD, dfAllE, dfAllF ], interleave_partitions=True)
我希望在没有内存错误的情况下执行连接

从下面的答案来看,我应该定义一个函数来执行日期的加载和连接,将其输入到dask.delayed函数中,然后对这些函数执行do.compute()

差不多


def daskFunc1():

    combA = np.load(file2A.format(0) , allow_pickle=True)
    combB = np.load(file2B.format(0), allow_pickle=True )
    combC = np.load(file2C.format(0), allow_pickle=True )
    combD = np.load(file2D.format(0) , allow_pickle=True)
    combE = np.load(file2E.format(0) , allow_pickle=True )
    combF = np.load(file2F.format(0), allow_pickle=True )

    dfAllA = dd.from_pandas(pd.DataFrame(combA), npartitions=10)
    dfAllB = dd.from_pandas(pd.DataFrame(combB), npartitions=10)
    dfAllC = dd.from_pandas(pd.DataFrame(combC), npartitions=10)
    dfAllD = dd.from_pandas(pd.DataFrame(combD), npartitions=10)
    dfAllE = dd.from_pandas(pd.DataFrame(combE), npartitions=10)
    dfAllF = dd.from_pandas(pd.DataFrame(combF), npartitions=10)

def daskFunc2():
    dfAllT = dd.concat([dfAllA, dfAllB, dfAllC, dfAllD, dfAllE, dfAllF ], interleave_partitions=True)

from dask.delayed import delayed

f1 = delayed(daskFunc1)
f2 = delayed(daskFunc2)

f1.compute()
f2.compute()

然而,当我试着

dfAllT.head()

我明白了


name错误:未定义名称“dfAllT”

您当前正在将所有数据加载到RAM中,然后将其交给Dask。如果您的所有数据在第一次启动时就已经填满了RAM,Dask就帮不了您多少忙


相反,告诉Dask如何加载数据,并让它在正确的时间加载数据,会更好。本文档可能为您指明了正确的方向:这是一个阅读这些源代码的老例子,看起来我应该定义一个函数来执行日期的加载和连接,将其输入dask.delayed函数,然后对这些函数执行do.compute()。然而,这并不完全可行。我更新了我的问题,发布了我尝试过的代码。