如何防止Dask中的from_delayed为每个输入创建一个分区?

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

我的代码旨在匹配两个大型数据集的名称。我使用的函数创建一个匹配名称的延迟列表。

应用 from_delayed 后,分区数量增加并等于我的观察量。因此,任务图的数量急剧增加,导致内存使用超载。我该如何避免呢?

matched_names_dd 数据帧的分区数等于lazy_results_names 延迟列表的行数。

@dask.delayed
def match_names_with_country_and_city(name_dealscan, country, city, name_series_orbis):
    best_match = process.extractOne(name_dealscan, name_series_orbis)
    best_match = best_match[0]  # Extracting the best match from the tuple
    return pd.DataFrame({'Matched_Name': [best_match]})  # Return a Pandas DataFrame

lazy_results_names = []
for name_dealscan, country, city in zip(dask_dealscan_names_list, dask_df_dealscan['Country'], dask_df_dealscan['City']):
    # Delay the computation of matching function
    lazy_result_name = match_names_with_country_and_city(name_dealscan, country, city, name_series_orbis)
    lazy_results_names.append(lazy_result_name)

matched_names_dd = dd.from_delayed(lazy_results_names)
dask dask-delayed
1个回答
0
投票

最简单(尽管不是最有效)的解决方案是在

repartition
之后调用
from_delayed
并根据需要减少分区数量。

批处理在计算方面会更有效,但它可能会使您的预处理更加困难。

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