首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fsspec、parquet和Pyarrow的流和缓存表格数据

使用fsspec、parquet和Pyarrow的流和缓存表格数据
EN

Stack Overflow用户
提问于 2022-10-27 11:29:12
回答 2查看 72关注 0票数 1

我正在尝试从存储在Dropbox中的拼花文件中流数据(但它可能在其他地方,S3、gdrive等…)。在Pandas中阅读,同时缓存它。为此,我尝试使用用于Python的fsspec

这些指示之后,这就是我现在正在尝试的:

代码语言:javascript
复制
from fsspec.implementations.arrow import ArrowFSWrapper
from fsspec.implementations.cached import CachingFileSystem
import pandas as pd

cfs = CachingFileSystem(target_protocol="http", cache_storage="cache_fs")
cfs_arrow = ArrowFSWrapper(cfs)

url = "https://www.dropbox.com/s/…./myfile.parquet?dl=0"
f = cfs_arrow.open(url, "rb")
df = pd.read_parquet(f)

但这会在cfs_arrow.open(url, "rb")引发以下错误

代码语言:javascript
复制
AttributeError: type object 'HTTPFileSystem' has no attribute 'open_input_stream'

我以前使用fsspec CachingFileSystem来从S3中流hdf5数据,所以我假设它会开箱即用,但我可能做错了什么。

有人能帮我吗?或者其他关于如何实现在同一会话中保存缓存以快速访问我的表格数据的目标的建议?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-27 13:27:05

使用fsspec打开和传递类似文件的对象的方便方法是:

代码语言:javascript
复制
with fsspec.open(
    "blockcache::https://www.dropbox.com/s/…./myfile.parquet?dl=0",
    blockcache={"cache_storage": "cache_fs"}
) as f:
    df = pd.read_parquet(f)

当然,实例化您自己的文件系统实例也可以。您可能感兴趣的是,fsspec也有一个dropbox后端,用于查找和操作文件。此外,当您只需要目标的一些行组或列时,就有一个fsspec.parquet模块来优化拼板访问。

票数 3
EN

Stack Overflow用户

发布于 2022-10-27 12:11:14

我的理解是有两种类型的文件系统:

  • fsspec
  • 箭头

如果要直接调用pyarrow函数,则需要一个arrow文件系统。如果您有fsspec文件系统(例如: CachingFileSystem),并且希望使用py箭头,则需要使用以下方式包装fsspec文件系统:

代码语言:javascript
复制
from pyarrow.fs import PyFileSystem, FSSpecHandler
pa_fs = PyFileSystem(FSSpecHandler(fs))

ArrowFSWrapper是向相反的方向发展(从pyarrow文件系统到fsspec文件系统)。

但在您的情况下,最终您使用的是文件对象(而不是文件系统)来调用pd.read_parquet,您可以直接使用fsspec文件系统(即CachingFileSystem)。

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

https://stackoverflow.com/questions/74221343

复制
相关文章

相似问题

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