使用dask返回多个数据帧



我使用read_csv((读取一长串csv文件并返回两个数据帧。我已经设法通过使用dask来加快这个动作。不幸的是,我在使用dask时无法返回多个变量。

下面的最低工作示例复制了我的问题:

@delayed(nout = 2)
def function(a):
d = 0
c = a + a
if a>4: # random condition to make c and d of different lenghts
d = a * a
return pd.DataFrame([c])#, pd.DataFrame([d])
list = [1,2,3,4,5]
dfs = [delayed(function)(int) for int in list]
ddf = dd.from_delayed(dfs)
ddf.compute()

欢迎提出任何解决这一问题的想法。谢谢

delayed装饰器有nout参数,所以类似的东西可能会起作用:

from dask import delayed
@delayed(nout=2)
def function(a,b):
c = a + b
d = a * b
return c, d
delayed_c, delayed_d = function(2, 3)

从这个问题来看,数据帧是在哪一步出现的还不清楚,但问题的关键部分(从延迟的dask返回多个值(是通过使用nout来回答的,请参阅此答案以了解完整的详细信息。

更新:

更新问题中的延迟函数返回一个数据帧元组,这意味着应该对元组的每个元素调用dd.from_delayed,或者应该对元组进行解压缩:

dfs = [delayed_value for int in list for delayed_value in function(int)]
ddf = dd.from_delayed(dfs)
ddf.compute()

最新更新