限制 Dask CPU 和内存使用(单节点)

Limit Dask CPU and Memory Usage (Single Node)

我是 运行 一台计算机上的 Dask 运行 .compute() 在一个巨大的镶木地板文件上执行计算将导致 dask 耗尽所有 CPU系统上的核心数。

import dask as dd

df = dd.read_parquet(parquet_file)  # very large file
print(df.names.unique().compute())

是否可以将 dask 配置为使用特定数量的 CPU 内核并将其内存使用量限制为 32 GB?使用 Python 3.7.2 和 Dask 2.9.2.

Dask.distributed.Client 创建一个 LocalCluster,您可以为其显式设置内存使用和核心数。

import numpy as np
import pandas as pd
from dask.distributed import Client
from dask import dataframe as dd

def names_unique(x):
    return x['Names'].unique()

client = Client(memory_limit='2GB', processes=False,
                n_workers=1, threads_per_worker=2)

# Data generation
df = pd.DataFrame({'Names': np.random.choice(['A', 'B', 'C', 'D'], size=1000000),
                   'sales': np.arange(1000000)})
df.to_parquet('parq_df')
ddf = dd.read_parquet('parq_df', npartitions=10)

# Custom computation
sent = client.submit(names_unique, ddf)
names_unique = sent.result().compute()
client.close()

输出:

names_unique
Out[89]: 
0    D
1    B
2    C
3    A
Name: Names, dtype: object