Python dask.dataframe.set_索引(…;,shuffle=';磁盘';)的数据丢失

Python dask.dataframe.set_索引(…;,shuffle=';磁盘';)的数据丢失,python,dask,dask-distributed,Python,Dask,Dask Distributed,感谢您提供了一个非常有用的软件包,感谢您的精彩工作。我不确定这是否是解决这个问题的合适地点。对此表示歉意。这篇文章的副本在 我得到了一个意想不到的结果。在具有多个分区(可能超过节点数)的dask数据帧上使用set_index(…,shuffle='disk')时,我会丢失大量数据(大约一半的数据丢失)。当我再次进行指数化时,问题变得更糟 当我只使用一个节点但仍然使用分布式调度器时,相同的过程可以很好地工作,而不会丢失数据 缔约国指出: 在并行或分布式设置中,某些操作(如set_index和mer

感谢您提供了一个非常有用的软件包,感谢您的精彩工作。我不确定这是否是解决这个问题的合适地点。对此表示歉意。这篇文章的副本在

我得到了一个意想不到的结果。在具有多个分区(可能超过节点数)的dask数据帧上使用set_index(…,shuffle='disk')时,我会丢失大量数据(大约一半的数据丢失)。当我再次进行指数化时,问题变得更糟

当我只使用一个节点但仍然使用分布式调度器时,相同的过程可以很好地工作,而不会丢失数据

缔约国指出:

在并行或分布式设置中,某些操作(如set_index和merge/join)比在单台计算机上的内存中更难执行

使用dask.distributed对大于内存的数据进行排序是否有一种最佳方法,还是在一台机器上使用默认调度程序更好

[1]中的
:将numpy作为np导入
…:将dask.dataframe作为dd导入
…:从dask_作业队列导入SLURMCluster
…:从dask.distributed导入客户端
…:cluster=slurmcuster(
…:芯数=32,
…:进程=32,
…:memory=“90GB”
...: )
…:集群规模(64)
…:客户端=客户端(群集)
在[2]中:client.get_versions()['scheduler']
出[2]:
{'host':{'python':'3.7.7.final.0',
“python位”:64,
'OS':'Linux',
“操作系统版本”:“3.10.0-1127.8.2.el7.nsc1.x86_64”,
“机器”:“x86_64”,
“处理器”:“x86_64”,
'字节顺序':'小',
‘立法会全体议员’:‘无’,
“LANG”:“sv_SE”},
'packages':{'python':'3.7.7.final.0',
"dask":"2.22.0",,
“分布式”:“2.22.0”,
“msgpack”:“1.0.0”,
“cloudpickle”:“1.5.0”,
“龙卷风”:“6.0.4”,
“工具Z”:“0.10.0”,
“numpy”:“1.19.1”,
“lz4”:无,
'blosc':无}
[2]中:对于[1e2,1e3,1e4,1e5,1.5e5,2e5,1e6]中的n:
…:n=int(n)
…:pdf=dd.from_数组(np.随机.置换(n).重塑(n,1))
…:n_tasks=len(pdf.set_index(0,shuffle='tasks'))
…:n_disk=len(pdf.set_index(0,shuffle='disk'))
…:打印(n_任务、n_磁盘、pdf.npartitions)
...:
100 100 1
1000 1000 1
10000 10000 1
100000 100000 2
150000 150000 3
200000 127770 4
1000000 499914 20
[3]中:对于[1e2,1e3,1e4,1e5,1.5e5,2e5,1e6]中的n:
…:n=int(n)
…:pdf=dd.from_数组(np.随机.置换(n).重塑(n,1))
…:n_tasks=len(pdf.set_index(0,shuffle='tasks'))
…:n_disk=len(pdf.set_index(0,shuffle='disk'))
…:打印(n_任务、n_磁盘、pdf.npartitions)
...:
100 100 1
1000 1000 1
10000 10000 1
100000 100000 2
150000 83836 3
200000 120200 4
1000000 551936 20

与2.23.0版本相同与2.23.0版本相同