为什么map_block函数会运行两次?

时间:2017-01-18 17:58:30

标签: python dask

我有一个问题,为什么map_block函数运行两次?当我在下面运行一个例子时:

 import dask.array as da
 import numpy as np

 def derivative(x):
     print(x.shape)
     return x - np.roll(x, 1)

 x = np.array([1, 1, 2, 3, 3, 3, 2, 1, 1])
 d = da.from_array(x, chunks = 5)
 y = d.map_blocks(derivative)
 res = y.compute()

我获得了这个输出:

 (1L,)
 (5L,)
 (4L,)

由于我的块是((5,4),),我认为derivative函数必须以某种方式运行一次才真正在这些块上执行,我是对的吗?

我在v0.13.0上有python v2.7和dask

1 个答案:

答案 0 :(得分:1)

如果你没有为map-blocks调用提供dtype,那么它将尝试在一个很小的样本数据集上运行你的函数(因此是单例形状)。如果您知道,可以通过明确传递dtype来避免这种情况。

y = d.map_blocks(derivative, dtype=d.dtype)