如何使用dask任何python库快速读取xlsb文件

问题描述 投票:0回答:1

我想用python读取大的xlsb文件。但是,我根本找不到任何解决方案。我尝试了Dask,但它没有读取它或excel文件的功能。而且,我使用了“延迟”这个功能,但速度并不快。和pyxlsb的功能一样。

import dask as dd
import pyxlsb as xls

def read_xlsb(file: list):   ## file is list of the paths of the files to read
    for num in range(len(file)):
        with xls.open_workbook(num) as wb:
            sheet_cnt = wb.sheet_names()

            for cnt in range(len(sheet_cnt)):
                with wb.get_sheet(cnt) as sheet:
                    for row in sheet.rows():
                        data = [item.v for item in row]

ddf = dd.delayed(read_xlsb)
result = ddf.compute()

我尝试过Dask,但效果不佳。如何快速读取xlsb文件?

python dask xlsb
1个回答
0
投票

我使用了“延迟”功能,但速度并不快。

您的函数是纯 Python 且受 CPU 限制,有大量内部循环。这意味着,如果一个进程中有多个线程运行此函数,您将看不到加速,因为一次只有一个线程可以持有 GIL 并取得进展。事实上,您可能会发现由于处理线程的开销而导致性能下降。

如果使用进程,那么任务可以真正并行运行。实现这一目标的最佳方法是使用“分布式”调度程序,即使在单台机器上也是如此。

请注意,您的代码片段以

.compute()
结尾。它看起来不像你的函数实际上返回或以其他方式对数据执行任何操作,但如果你的最终目标是拥有一个 pandas 数据帧,并且所有内容都适合内存,那么直接使用 pandas 进行 IO 可能是最好的,并且只使用当你需要的时候就可以使用它。我还注意到,您从不调用延迟函数,因此您可能没有显示运行速度很慢的实际代码。

© www.soinside.com 2019 - 2024. All rights reserved.