【发布时间】:2021-06-22 17:56:31
【问题描述】:
我有一个小数据帧(约 100MB)和一个昂贵的计算,我想为每一行执行。它不是可向量化的计算;它需要对每一行进行一些解析和数据库查找。
因此,我决定尝试使用 Dask 来并行化任务。该任务是“令人尴尬的并行”,执行顺序或重复执行没有问题。但是,由于某些未知原因,内存使用量激增至约 100GB。
这是有问题的代码示例:
import pandas as pd
import numpy as np
import dask.dataframe as dd
from dask.distributed import Client
from dask_jobqueue import LSFCluster
cluster = LSFCluster(memory="6GB", cores=1, project='gRNA Library Design')
cluster.scale(jobs=16)
client = Client(cluster)
required_dict = load_big_dict()
score_guide = lambda row: expensive_computation(required_dict, row)
library_df = pd.read_csv(args.library_csv)
meta = library_df.dtypes
meta = meta.append(pd.Series({
'specificity': np.dtype('int64'),
'cutting_efficiency': np.dtype('int64'),
'0 Off-targets': np.dtype('object'),
'1 Off-targets': np.dtype('object'),
'2 Off-targets': np.dtype('object'),
'3 Off-targets': np.dtype('object')}))
library_ddf = dd.from_pandas(library_df, npartitions=32)
library_ddf = library_ddf.apply(score_guide, axis=1, meta=meta)
library_ddf = library_ddf.compute()
library_ddf = library_ddf.drop_duplicates()
library_ddf.to_csv(args.outfile, index=False)
我的猜测是,查找所需的大字典不知何故是问题所在,但它的大小总共只有约 1.5GB,并且不包含在生成的数据帧中。
为什么 Dask 会占用内存?
【问题讨论】:
标签: python pandas data-science dask