首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用fsspec+adlfs加快从adl://读取CSV/Parquet文件的速度?

如何用fsspec+adlfs加快从adl://读取CSV/Parquet文件的速度?
EN

Stack Overflow用户
提问于 2020-03-12 00:33:00
回答 1查看 858关注 0票数 3

我有一个数千兆字节的CSV文件居住在Azure数据湖。使用Dask,我可以在一分钟内读取这个文件,如下所示:

代码语言:javascript
复制
>>> import dask.dataframe as dd
>>> adl_path = 'adl://...'
>>> df = dd.read_csv(adl_path, storage_options={...})
>>> len(df.compute())

但是,我不想把它读到Dask或Pandas DataFrame中--我想直接访问底层文件。(目前是CSV,但我也希望能够处理Parquet文件。)所以我也在尝试使用adlfs 0.2.0

代码语言:javascript
复制
>>> import fsspec
>>> adl = fsspec.filesystem('adl', store_name='...', tenant_id=...)
>>> lines = 0
>>> with adl.open(adl_path) as fh:
>>>    for line in fh:
>>>        lines += 1

在与Dask进程相同的时间内,该方法只读取了0.1%的输入。

我尝试使用fsspec的缓存,认为这将加快初始缓存完成后的访问速度:

代码语言:javascript
复制
>>> fs = fsspec.filesystem("filecache", target_protocol='adl', target_options={...}, cache_storage='/tmp/files/')
>>> fs.exists(adl_path) # False
>>> fs.size(adl_path) # FileNotFoundError

>>> # Using a relative path instead of fully-qualified (FQ) path:
>>> abs_adl_path = 'absolute/path/to/my/file.csv'
>>> fs.exists(abs_adl_path) # True
>>> fs.size(abs_adl_path) # 1234567890 -- correct size in bytes
>>> fs.get(abs_adl_path, local_path) # FileNotFoundError
>>> handle = fs.open(abs_adl_path) # FileNotFoundError

是否有一种可以将CSV(也包括Parquet)远程读取为普通Python文件句柄的性能方法,而无需首先作为Dask DataFrame加载?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-12 15:19:33

我不知道为什么fs.get不能工作,但最后一行请试一下:

代码语言:javascript
复制
handle = fs.open(adl_path)

也就是说,打开原始路径,但是在'/tmp/files/‘中的某个地方得到一个本地文件的文件句柄(一旦复制完成)。

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

https://stackoverflow.com/questions/60646151

复制
相关文章

相似问题

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