我的代码旨在匹配两个大型数据集的名称。我使用的函数创建一个匹配名称的延迟列表。
应用 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)
最简单(尽管不是最有效)的解决方案是在
repartition
之后调用 from_delayed
并根据需要减少分区数量。
批处理在计算方面会更有效,但它可能会使您的预处理更加困难。