正在尝试缓存s3文件

2024-05-21 07:32:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两条管道。第一个管道从s3读取文件并进行一些处理和更新文件。第二个管道运行多个作业,对于每个作业,我从s3下载文件并生成一些输出。我觉得我在第二条管道上浪费了很多时间,因为我目前在多个作业中使用这些文件时没有缓存这些文件。因此,我试图在本地缓存s3文件

我做了一些研究,发现可以使用s3fsfsspec。到目前为止,我能够使用s3fs从s3下载并打开一个文件,但我不知道如何在本地缓存它

import s3fs
import pandas as pd

FS = s3fs.S3FileSystem()

file = FS.open('s3://my-datasets/something/foo.csv')
# of = fsspec.open("filecache::s3://bucket/key", s3={'anon': True}, filecache={'cache_storage'='/tmp/files'})
df = pd.read_csv(file, sep='|', header=None)
print(df)

正如您在上面的代码中所看到的,我正在从s3打开一个文件,然后将其读取到一个数据帧。现在我想知道是否有一个参数或我可以传递的东西,以便该文件得到缓存

当然,另一种方法是我可以检查文件是否存在于某个路径中,如果存在,则使用该路径,如果不存在,则下载该文件,但我觉得必须有更好的方法来进行缓存。我愿意接受任何建议


Tags: 文件csv方法importdf管道s3作业
1条回答
网友
1楼 · 发布于 2024-05-21 07:32:18

AmazonS3是一个对象存储服务,可以通过经过身份验证的API请求访问

诸如s3fs之类的工具将AmazonS3表示为一个文件系统,但它们需要将这种用法转换为正常的S3API调用。在S3或本地s3fs虚拟磁盘中进行大量更新时,更新另一端可能需要一些时间,在高使用率情况下,它们可能会变得不同步

s3fs保留文件缓存的事实意味着文件可能会更快地失去同步,这取决于它返回并检查S3中的内容是否已更改的频率

这基本上是在应用程序和S3之间增加了另一层复杂性。如果你能直接去,它总是更可靠。但是,这意味着您可能需要自己实现一些有用的功能

如果您打算在生产环境中使用它,我建议您创建一个模拟适当使用级别的测试平台,以确认所有系统都能按预期工作

相关问题 更多 >