【发布时间】:2016-11-17 18:57:05
【问题描述】:
所以dask.dataframe.map_partitions() 接受func 参数和meta kwarg。它究竟是如何决定它的返回类型的?举个例子:
...\some_folder 中有很多 csv。
ddf = dd.read_csv(r"...\some_folder\*", usecols=['ColA', 'ColB'],
blocksize=None,
dtype={'ColA': np.float32, 'ColB': np.float32})
example_func = lambda x: x.iloc[-1] / len(x)
metaResult = pd.Series({'ColA': .1234, 'ColB': .1234})
result = ddf.map_partitions(example_func, meta=metaResult).compute()
我对“分布式”计算还很陌生,但我直觉上希望这会返回 Series 对象的集合(很可能是列表或字典),但结果是一个可以被视为串联的 Series 对象每个分区上 example_func 的结果。如果这个系列有一个 MultiIndex 来指示分区标签,这本身就足够了。
从this question、docs 和the source code itself 可以看出,这是因为ddf.divisions 将返回(None, None, ..., None) 作为读取csv 的结果?是否有一种 dask-native 方式来执行此操作,或者我是否需要自己手动进入并破坏返回的系列(example_func 在每个分区上返回的系列的串联)?
另外,请随时纠正我的假设/做法,因为我是新手。
【问题讨论】: