【发布时间】:2017-07-15 00:40:39
【问题描述】:
我正在尝试在一个数据框中处理多个主题的数据。有超过 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 个,并且内存不足
【问题讨论】:
-
这里
df的尺寸是多少,pred是从哪里来的?我注意到df必须是函数闭包中包含的全局变量,并且您的代码非常循环,因此它可能可以用更好的 pandas 方法重写。 -
您可以尝试
e.scatter(df)并在函数签名中传递df以避免将其直接复制到图中X 次。
标签: dask