dask map_partitions 奇怪的行为

问题描述 投票:0回答:1

当我从 pandas 创建一个具有 1 个分区的 dask 数据框,然后对其调用 map_partitions() 时,它似乎被调用了两次。 如果我有5个分区,则调用6次。 一般来说,该函数会被额外调用 1 次,其中有一些我不认识的记录。 它们不会出现在写入 d 的输出中。

第一个调用似乎是使用一个我不认识的分区,该分区有 2 条记录。 这会导致其他问题,但为了使描述简洁,我现在不会提及它们。

详情:

python 3.9.18
dask 2024.8.0
pandas 2.0.3
import pandas as pd
import dask.dataframe as dd

df = pd.DataFrame({
    'a': list(range(100))
})
ddf = dd.from_pandas(df, npartitions=1)

def some_func(df):
    print (df.shape)
    print (df.head())
    return df

ddf = ddf.map_partitions(some_func)
print (ddf.compute().shape)

输出:

(2, 1)
  a
0 1
1 1
(100, 1)
  a
0 0
1 1
2 2
3 3
4 4
(100, 1)

我需要知道如何避免对我不认识的记录进行额外的函数调用

python dask
1个回答
0
投票

答案可以在map_partitions文档中找到

默认情况下,dask 尝试通过在一些虚假数据上运行您提供的函数来推断输出元数据。这在许多情况下效果很好,但有时可能会很昂贵,甚至失败。为了避免这种情况,您可以使用meta关键字手动指定输出元数据。

由于您没有提供

meta
kwarg,Dask 尝试通过对假数据调用一次函数来推断输出列和数据类型。

© www.soinside.com 2019 - 2024. All rights reserved.