我有期货的集合,这是在dask数据帧上持续存在的结果。如何对它们进行延迟操作?

时间:2017-11-23 13:39:00

标签: dask dask-distributed

我已经设置了一个调度程序和4个工作节点来对csv进行一些处理。 csv的大小只有300 MB。

df = dd.read_csv('/Downloads/tmpcrnin5ta',assume_missing=True)

df = df.groupby(['col_1','col_2']).agg('mean').reset_index()
df = client.persist(df)



def create_sep_futures(symbol,df):    

     symbol_df = copy.deepcopy(df[df['symbol' == symbol]])

     return symbol_df
lazy_values = [delayed(create_sep_futures)(symbol, df) for symbol in st]

 future = client.compute(lazy_values)
 result = client.gather(future)

st list包含1000个元素

当我这样做时,我收到了这个错误:

 distributed.worker - WARNING -  Compute Failed
 Function:  create_sep_futures
 args:      ('PHG',       symbol  col_3  col_2  \
 0                A            1.451261e+09                23.512857   
 1                A            1.451866e+09                23.886857   
 2                A            1.452470e+09                25.080429   

 kwargs:    {}
 Exception: KeyError(False,)

我的假设是工人应该获得完整的数据框和查询。但我认为它只是阻止并试图这样做。

它的解决方法是什么?由于数据帧块已经在工作者内存中。我不想将数据框移动到每个工作人员。

1 个答案:

答案 0 :(得分:0)

默认情况下,使用数据框架语法和API对数据帧的操作是延迟(延迟),您不需要再做任何事情了。

第一个问题:您的语法错误df[df['symbol' == symbol]] => df[df['symbol'] == symbol]。这是False密钥的来源。

所以您可能正在寻找的解决方案:

future = client.compute(df[df['symbol'] == symbol])

如果你想要单独处理这些块,你可以查看df.map_partitions,它使用普通函数并负责传递数据或延迟/期货或{ {1}},它将为您提供一组延迟对象,您可以将它们与延迟函数一起使用。