Sta*_*Fox 5 python pandas dask
因此dask.dataframe.map_partitions()需要一个func论点和meta争论。如何准确确定其返回类型?举个例子:
... \ 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()
Run Code Online (Sandbox Code Playgroud)
我对“分布式”计算还很陌生,但是我可以直观地期望它返回Series对象的集合(很可能是列表或字典),但是结果是一个Series对象,可以认为是结果的串联每个分区上的example_func。如果此系列有一个MultiIndex来指示分区标签,那么这本身就足够了。
从这个问题,文档和源代码本身可以看出,这是因为读取csv ddf.divisions会返回a (None, None, ..., None)吗?有没有一种简便的方法来执行此操作,或者我需要自己手动进入并中断返回的Series(example_func每个分区返回的Series的串联)?
另外,请随时更正我的假设/做法,因为我是新手。
所以 dask.dataframe.map_partitions() 需要一个 func 参数和元 kwarg。它究竟是如何决定它的返回类型的?
map_partition尝试以func“智能”方式将返回的结果连接到 dask DataFrame 或 dask Series 对象。该决定基于 的返回值func:
func返回标量,则map_partitions返回 dask 系列对象。func返回一个 pd.Series 对象,则map_partition返回一个 dask Series 对象,其中连接了所有返回的 pd.Series 对象func。func返回一个 pd.DataFrame,map_partitions 返回一个 dask Dataframe 对象,其中这些 pd.DataFrame 对象沿第一个轴连接。如果您对特殊分区的结果感兴趣,可以使用get_partition(). 如果分区标签通常对您来说是一个重要信息,我会考虑在从 csv 读取数据后直接分配一个单独的 ddf 列,其中包含您需要的所有信息。之后,您可以func以某种方式构造它,它返回一个 pd.DataFrame,其中一列包含计算结果,而在另一列中包含识别结果所需的信息。
| 归档时间: |
|
| 查看次数: |
1984 次 |
| 最近记录: |