Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Dask包性能低下?_Python_Performance_Dask - Fatal编程技术网

Python Dask包性能低下?

Python Dask包性能低下?,python,performance,dask,Python,Performance,Dask,我正在对dask.bag进行一些测试,为数百万个文本文件的大型文本处理工作做准备。现在,在我的几十到几十万个文本文件的测试集上,我看到dask的运行速度比直接的单线程文本处理函数慢5到6倍 有人能解释一下我在哪里可以看到在大量文本文件上运行dask的速度优势吗?在它开始变得更快之前,我需要处理多少文件?150000个小文本文件是不是太少了?我应该调整什么样的性能参数,以使dask在处理文件时加快速度?与直接单线程文本处理相比,性能下降5倍的原因是什么 下面是我用来测试dask的代码示例。这是根据

我正在对dask.bag进行一些测试,为数百万个文本文件的大型文本处理工作做准备。现在,在我的几十到几十万个文本文件的测试集上,我看到dask的运行速度比直接的单线程文本处理函数慢5到6倍

有人能解释一下我在哪里可以看到在大量文本文件上运行dask的速度优势吗?在它开始变得更快之前,我需要处理多少文件?150000个小文本文件是不是太少了?我应该调整什么样的性能参数,以使dask在处理文件时加快速度?与直接单线程文本处理相比,性能下降5倍的原因是什么

下面是我用来测试dask的代码示例。这是根据路透社的一组测试数据运行的,位于:

这些数据与我正在处理的数据不完全相同。在我的另一个例子中,它是一堆单独的文本文件,每个文件一个文档,但是我看到的性能下降是差不多的。代码如下:

import dask.bag as db
from collections import Counter
import string
import glob
import datetime

my_files = "./reuters/*.ascii"

def single_threaded_text_processor():
    c = Counter()
    for my_file in glob.glob(my_files):
        with open(my_file, "r") as f:
            d = f.read()
            c.update(d.split())
    return(c)

start = datetime.datetime.now()
print(single_threaded_text_processor().most_common(5))
print(str(datetime.datetime.now() - start))

start = datetime.datetime.now()
b = db.read_text(my_files)
wordcount = b.str.split().concat().frequencies().topk(5, lambda x: x[1])
print(str([w for w in wordcount]))
print(str(datetime.datetime.now() - start))
以下是我的结果:

[('the', 119848), ('of', 72357), ('to', 68642), ('and', 53439), ('in', 49990)]
0:00:02.958721
[(u'the', 119848), (u'of', 72357), (u'to', 68642), (u'and', 53439), (u'in', 49990)]
0:00:17.877077

Dask每项任务的开销约为1ms。默认情况下,
dask.bag.read_text
函数为每个文件名创建一个任务。我怀疑你只是被头顶上的东西淹没了

这里的解决方案可能是在一个任务中处理多个文件。read_text函数没有提供任何选项,但是您可以切换到,这提供了更大的灵活性,以后如果愿意,可以转换为dask.bag