使用 Dask 计算或坚持使用 Dask 延迟时内存爆炸

Memory Blow Up when using Dask compute or persist with Dask Delayed

我正在尝试在一个数据框中处理多个主题的数据。有 >30 个主题,每个主题有 14 个计算,它是一个大数据集,但超过 5 个就会炸毁调度程序节点上的内存,而没有 运行 在与调度程序相同的节点上使用任何工作程序它有 128gb记忆?有什么想法可以解决这个问题,或者我做错了什么?代码如下。

def channel_select(chn,sub):

    subject = pd.DataFrame(df.loc[df['sub'] == sub])
    subject['s0'] = subject[chn]
    val = []
    for x in range(13):
        for i in range(len(subject)):
            val.append(subject['s0'].values[i-x])
        name = 's' + str(x+1)
        subject[name] = val
        val = []
    return subject

subs = df['sub'].unique()
subs = np.delete(subs, [34,33])

for s in subs:
    for c in chn:
        chn_del.append(delayed(channel_select)(c,subs[s]))

results = e.persist(pred)

我已将代码显示给 运行 所有科目,但一次超过 5 个,我 运行 内存不足

您是在告诉计算机保留将近 1,000 GB 的内存。

但你已经知道了 (:

正如 Mary 上面所说,每次调用 channel_select 都会创建数据帧并将其存储在调度程序内存中,其中 30 个对象每次调用 14 次,一个 2gb 数据帧...是的,您可以计算一下如何太多的记忆试图抓住。