了解dask中的map_partitions

时间:2017-11-06 13:37:24

标签: python dataframe parallel-processing dask

我想了解map_partitions中的dask是做什么的。这是我的例子:

import dask.dataframe as dd
import pandas as pd
from dask.multiprocessing import get
import random

df = pd.DataFrame({'col_1':random.sample(range(10000), 100), 'col_2': random.sample(range(10000), 100) })

def test_f(df):
    print(df.col_1)
    print("------------")

ddf = dd.from_pandas(df, npartitions=8)

ddf['result'] = ddf.map_partitions(test_f ).compute(get=get)

这是输出:

0    1.0
1    1.0
Name: col_1, dtype: float64
------------

为什么我不能从我的数据框中完整打印出来?输出意味着什么?

1 个答案:

答案 0 :(得分:2)

map_partitions采用可选的meta=关键字,您可以使用该关键字告诉Dask您希望函数的输出看起来如何。这通常是一个好主意,因为它避免了Dask必须推断输出的外观,这可能导致不会发生微不足道的工作。

在没有meta=的情况下,Dask将首先调用您的函数,推断输出,然后调用每个分区。你看到了第一个。如果您提供任何meta=,则只会看到分区。显然你想要提供实际预期的输出模板;但在你的情况下,该函数实际上并没有返回任何内容。

为了避免过多的推理工作,Dask使用典型的虚拟值。在这种情况下,对于每个float列,使用1.0的值,并且有多行以确保输入看起来像数据帧而不是系列。