Python Dask - dataframe.map_partitions() return 值
Python Dask - dataframe.map_partitions() return value
所以 dask.dataframe.map_partitions()
需要一个 func
参数和 meta
kwarg。它究竟是如何决定其 return 类型的?例如:
...\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()
我对 "distributed" 计算很陌生,但我直觉上希望这是 return Series 对象的集合(很可能是列表或字典),但结果是可以将每个分区上的 example_func 结果串联起来的系列对象。如果这个系列有一个 MultiIndex 来指示分区标签,这本身就足够了。
据我从 , the docs, and the source code itself 可以看出,这是因为 ddf.divisions
将 return 作为读取 csv 的结果 (None, None, ..., None)
?是否有一种 dask-native 方法可以做到这一点,或者我是否需要手动进入并打破 returned 系列(returned 由 example_func
在每个分区)我自己?
此外,请随时在这里更正我的 assumptions/practices,因为我是 dask 新手。
So dask.dataframe.map_partitions() takes a func argument and the meta
kwarg. How exactly does it decide its return type?
map_partition
尝试以 'intelligent' 的方式将 func
编辑的结果 return 连接到 dask DataFrame 或 dask Series 对象。此决定基于 func
的 return 值:
- 如果
func
return 是一个标量,map_partitions
return 是一个 dask Series 对象。
- 如果
func
return是一个pd.Series对象,map_partition
return是一个dask Series对象,其中所有pd.Series对象return由 func
拼接而成。
- 如果
func
return是一个pd.DataFrame,map_partitions return是一个dask Dataframe对象,其中这些pd.DataFrame对象被连接在一起第一个轴。
如果您对特殊分区的结果感兴趣,可以使用get_partition()
。如果分区标签通常对您来说是重要信息,我会考虑在从 csv 读取数据后直接分配一个单独的 ddf 列,其中包含您需要的所有信息。之后,您可以以某种方式构造 func
,它 return 是一个 pd.DataFrame,其中一列包含计算结果,另一列包含识别结果所需的信息。
所以 dask.dataframe.map_partitions()
需要一个 func
参数和 meta
kwarg。它究竟是如何决定其 return 类型的?例如:
...\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()
我对 "distributed" 计算很陌生,但我直觉上希望这是 return Series 对象的集合(很可能是列表或字典),但结果是可以将每个分区上的 example_func 结果串联起来的系列对象。如果这个系列有一个 MultiIndex 来指示分区标签,这本身就足够了。
据我从 ddf.divisions
将 return 作为读取 csv 的结果 (None, None, ..., None)
?是否有一种 dask-native 方法可以做到这一点,或者我是否需要手动进入并打破 returned 系列(returned 由 example_func
在每个分区)我自己?
此外,请随时在这里更正我的 assumptions/practices,因为我是 dask 新手。
So dask.dataframe.map_partitions() takes a func argument and the meta kwarg. How exactly does it decide its return type?
map_partition
尝试以 'intelligent' 的方式将 func
编辑的结果 return 连接到 dask DataFrame 或 dask Series 对象。此决定基于 func
的 return 值:
- 如果
func
return 是一个标量,map_partitions
return 是一个 dask Series 对象。 - 如果
func
return是一个pd.Series对象,map_partition
return是一个dask Series对象,其中所有pd.Series对象return由func
拼接而成。 - 如果
func
return是一个pd.DataFrame,map_partitions return是一个dask Dataframe对象,其中这些pd.DataFrame对象被连接在一起第一个轴。
如果您对特殊分区的结果感兴趣,可以使用get_partition()
。如果分区标签通常对您来说是重要信息,我会考虑在从 csv 读取数据后直接分配一个单独的 ddf 列,其中包含您需要的所有信息。之后,您可以以某种方式构造 func
,它 return 是一个 pd.DataFrame,其中一列包含计算结果,另一列包含识别结果所需的信息。