dask`DataFrame.set_index()的并行执行`

dask`DataFrame.set_index()的并行执行`,dataframe,concurrency,parallel-processing,dask,dask-distributed,Dataframe,Concurrency,Parallel Processing,Dask,Dask Distributed,我正在尝试在大型dask数据帧上创建索引。无论是哪种调度器,我都无法为操作使用超过一个内核的等效值。代码是: (ddf. .read_parquet(pq_in) .set_index('title', drop=True, npartitions='auto', shuffle='disk', compute=False) .to_parquet(pq_out, engine='fastparquet', object_encoding='json', write_index=True,

我正在尝试在大型dask数据帧上创建索引。无论是哪种调度器,我都无法为操作使用超过一个内核的等效值。代码是:

(ddf.
 .read_parquet(pq_in)
 .set_index('title', drop=True, npartitions='auto', shuffle='disk', compute=False)
 .to_parquet(pq_out, engine='fastparquet', object_encoding='json', write_index=True, compute=False)
 .compute(scheduler=my_scheduler)
)

我在一台64核的机器上运行这个。如何利用更多的内核?或者
set\u index
本身是连续的吗?

应该使用多个内核,尽管使用磁盘进行洗牌可能会引入其他瓶颈,如本地硬盘驱动器。通常情况下,您不会受到额外CPU内核的限制


在您的情况下,我会在一台机器上使用分布式调度程序,这样您就可以使用诊断仪表板来了解您的计算。

使用分布式调度程序和设置
shuffle='disk'
可以提高并行性,但似乎会使dask尝试将所有数据加载到内存中。有可能用比内存大的数据进行并行洗牌吗?实际上,我的数据适合内存。问题是分布式调度器似乎正在将整个数据集加载到每个工作进程中。