首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用dask并行读取文件

用dask并行读取文件
EN

Stack Overflow用户
提问于 2019-02-24 08:43:42
回答 1查看 251关注 0票数 1

我有一个关于延迟装饰的问题,它可能类似于以下问题“Dask:我将如何将我的代码与dask延迟并行?”但即使在那里,它也没有得到答复。我有以下代码:

代码语言:javascript
复制
@dask.delayed
def remove_unnessasey_data(temp,l1):
    do some work
    return temp

@dask.delayed
def change_structure(temp):
    do some work
    return temp1

@dask.delayed
def read_one(filename):
    return pd.read_csv(filename)

然后:

代码语言:javascript
复制
def f(filenames):
    results = []
    for filename in filenames:
        results.append(change_structure( remove_unnessasey_data(
            read_one(filename),l1)))

    return results

result = dask.compute(*result)

根据,它应该提高速度,但速度是一样的,如果我从大文件中读取大块,有人能解释为什么吗??我知道GIL,但是根据文档,它应该提高速度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-24 14:42:34

根据这一点,它应该提高速度。

胡扯。这种文件,因为没有一个更好的词,一般是错误的。

说并行执行IO通常会提高性能,这对大多数文件系统和磁盘存储系统的工作方式有很大的误解。

为什么?

寻找时间。

通常,文件系统尽可能地将文件存储在连续块中。若要读取文件中的位置X,首先必须将磁盘头放置在容纳扇区X所在的轨道上。这需要时间。然后,系统必须等待直到扇区在磁盘头下旋转。这又需要时间。

很明显,为什么从旋转磁盘顺序读取文件的速度更快--要读取扇区N,磁盘头必须首先寻找包含扇区N的轨道,但是由于文件尽可能连续地存储,包含扇区N的磁道也可能包含扇区N+1、N+2、N+3以及更多扇区。这两个磁盘(磁盘通常不是哑设备--它们基本上是具有内置缓存系统的功能齐全的IO计算机)和文件系统都具有预读缓存功能,而从旋转磁盘顺序读取文件往往会减少查找数据的时间。

现在试着并行阅读。

线程A读取扇区X。磁盘试图跟踪,等待扇区X通过头部。当这种情况发生时,线程B试图读取扇区Y。磁盘最终读取扇区X,但是有一个挂起的命令来读取扇区Y。现在磁盘必须找到指向正确轨道的头,也许会放弃为线程A的下一个读取获得扇区X+1的readahead,等待磁头移动,然后等待扇区Y从头下面读取。

同时,线程C发出读取Z扇区的请求.

磁盘头在整个磁盘上跳舞。然后等待适当的区域通过在头下。

一个典型的消费者级5,400 RPM SATA磁盘,名义上支持100 MB/秒的IO速率,可以通过这样的IO模式降低到每秒几个千字节

并行读取或写入数据几乎从不提高速度,特别是在旋转磁盘上使用标准文件系统的情况下。

如果单个线程的IO不饱和存储系统--不仅仅是磁盘,而是从CPU到/从磁盘的整个路径,那么使用SSD可以获得更好的性能。许多,许多主板有廉价的,缓慢的磁盘控制器和/或缺乏IO带宽。有多少人在购买计算机时完全忽略了磁盘控制器或主板的IO带宽?

有些文件系统确实支持并行IO以提高性能。它们往往是专有的、昂贵的和快速IBM光谱标度 (最初是GPFS)和Oracle的HSM (最初是SAMFS/QFS)是两个例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54850204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档