问题标签 [python-s3fs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
286 浏览

python - Zarr:将 xarray 写入性能提高到 S3

将数据集写入xarrayAWS S3 会花费惊人的大量时间,即使实际上没有使用compute=False.

这是一个例子:

即使没有实际计算,与 S3 存储桶位于同一区域的 EC2 也to_zarr需要大约 6 秒的时间。

查看调试日志,似乎正在进行相当多的重定向,因为默认区域 inaiobotocore设置为us-east-2while bucket is in eu-central-1

如果我首先手动将默认区域放入环境变量中

然后所需时间下降到3.5 秒左右

所以我的问题是:

  1. 有没有办法将该区域传递给fsspec(或s3fs)?我已经尝试添加s3_additional_kwargs={"region":"eu-central-1"}到该get_mapper方法,但没有做任何事情。

  2. xarray有没有比上面(with )更好的方式与 S3 上的 zarr 交互fsspec


版本:

0 投票
1 回答
217 浏览

python - 在 s3fs.S3FileSystem 中设置超时的正确方法是什么?

我尝试了各种方法来设置s3fs.S3FileSystem对象的读取超时,例如

s3 = s3fs.S3FileSystem(s3_additional_kwargs={"read_timeout": 500}, config_kwargs={"read_timeout": 500} )

或者 s3.read_timeout = 500 但他们似乎都没有按预期控制超时。有谁知道设置这些类型参数的正确方法?

谢谢

0 投票
0 回答
110 浏览

python - 根据当前日期写入 S3 密钥

我正在尝试使用S3FileSystempython 在 S3 中编写一个 csv。每次我写的时候,我都会在当前日期的一个键('%Y-%m -%d') 以便按日期组织数据。我在想这样,数据将按日期组织,同一天不会创建新密钥。

但看起来我跑了。如果我在今天的日期(2021-03-17)运行以下代码,2021-03-17则第一次创建此密钥。2021-03-18即使我在同一天运行它,下次它也会创建一个新密钥。

谁能建议如何解决这个问题?

完整代码如下

更新

这实际上有效。日期是 UTC,所以即使我的本地日期是相同的,日期在 UTC 中发生了变化,这造成了混乱。

0 投票
0 回答
622 浏览

amazon-web-services - python s3fs中的配置文件参数

我正在尝试在 python 中使用 s3fs 连接到 s3 存储桶。关联的凭据保存在 ~/.aws/credentials 中名为“pete”的配置文件中:

这似乎适用于 AWS CLI(在 Windows 上):

但是当我使用 python 中的 s3fs 包使用应该是等效的代码时,我得到一个权限被拒绝的错误:

我收到此错误:

我必须假设这不是 s3 中的配置问题,因为我可以通过 CLI 访问 s3。所以我的 s3fs 代码一定有问题,但我找不到关于 s3fs 中配置文件的大量文档来弄清楚发生了什么。任何帮助当然表示赞赏。

0 投票
1 回答
2222 浏览

apache-spark - 无法在 pyspark 中导入 s3fs

当我尝试使用以下代码在 pyspark 中导入 s3fs 库时:

我收到以下错误:

遇到错误:无法从'fsspec.asyn'(/usr/local/lib/python3.7/site-packages/fsspec/asyn.py)导入名称'maybe_sync' Traceback(最近一次调用最后):文件“/ usr/local/lib/python3.7/site-packages/s3fs/ init .py”,第 1 行,从 .core 导入 S3FileSystem,S3File 文件“/usr/local/lib/python3.7/site-packages/s3fs /core.py",第 12 行,从 fsspec.asyn 导入 AsyncFileSystem、sync、sync_wrapper、maybe_sync ImportError: cannot import name 'maybe_sync' from 'fsspec.asyn' (/usr/local/lib/python3.7/site-包/fsspec/asyn.py)

fsspec软件包已安装在我的笔记本中。而我其实已经用了很长时间了,突然发生了这种情况。我试过谷歌搜索,但找不到这个特定的错误。有没有人遇到过这个?如果是这样,您知道如何解决吗?

0 投票
0 回答
276 浏览

pandas - 在 pandas.read_parquet 中使用 AWS_PROFILE

我正在本地测试它,我有一个 ~/.aws/config 文件。

~/.aws/config 看起来像:

我还有一个 AWS_PROFILE 环境变量设置为“a”。

我想读取一个文件,使用 pandas 可以通过配置文件 b 访问该文件。

我可以通过以下方式访问它s3fs

但是,如果我尝试使用 storage_options 将其传递给 pd.read_parquet,我会得到一个PermissionError: Forbidden.

下面的完整追溯

注意:有一个与此有些相关但没有帮助的老问题:How to read parquet file from s3 using dask with specific AWS profile

0 投票
0 回答
167 浏览

python - 读取 s3fs 文件对象时,h5py 很慢

我正在使用 h5py 和 s3fs 的以下组合从 Amazon S3 上的较大 HDF5 文件中读取几个小数据集。

这些读取速度相对较慢,似乎以这种方式读取单个数据集与在本地从 S3 存储桶复制整个文件然后读取数据集一样慢。我认为原因是 h5py 通过 s3fs 发送的查找和读取命令有很多开销。

有没有人有一个更优化方法的想法?(除了下载文件然后读取它,如果我想读取多个数据集会更快,但仍然太慢)

谢谢!

伊曼纽尔

0 投票
0 回答
131 浏览

python - 使用 S3FS 访问 TFX 管道中的 S3 存储桶对象

我正在构建一个 TFX 管道,其中包含来自 S3 存储桶的输入图像。在 TF 转换组件步骤中,我试图读取一系列图像,其 URL 以 TFX 的 SparseTensor 格式存储。我正在尝试使用 S3FS Python 模块来做到这一点,因为我一直在将它用于管道的其他组件,并且听说同时使用 Boto3 和 S3FS 会导致问题(我认为这不是重点)。

无论如何,我已经建立了与 S3 存储桶的连接,并正在尝试读取图像。这是我的代码(或者至少是我认为与问题密切相关的部分):

运行它会给我一个标准错误消息,我在尝试使用无效字符访问存储桶时看到:

ParamValidationError:参数验证失败:无效的存储桶名称“SparseTensor(indices=Tensor(”inputs”:存储桶名称必须与正则表达式匹配“^[a-zA-Z0-9.-_]{1,255}$”或为 ARN 匹配)正则表达式 "^arn:(aws). :(s3|s3-object-lambda):[az-0-9]+:[0-9]{12}:accesspoint[/:][a-zA-Z0 -9-]{1,63}$|^arn:(aws). :s3-outposts:[az-0-9]+:[0-9]{12}:outpost[/:][a-zA -Z0-9-]{1,63}[/:]接入点[/:][a-zA-Z0-9-]{1,63}$"

该错误表明问题出在该行上with s3.open(str(inputs[key]), 'rb') as f:,因此我需要以某种方式正确表示 S3 URL。URL 以格式存储在原始 CSV 数据集中bucket_name\key\file.jpg名为image_path的列中(在此之前转换为 SparseTensor,在上述代码中表示为inputs[key])。

我认为问题不在于 SparseTensor 格式,而在于 URL。

0 投票
0 回答
121 浏览

jupyter-notebook - AWS Sagemaker 笔记本间歇性“无法找到凭证”

我正在尝试使用 Dask 将多个文件 (JSON) 从 AWS S3 获取到 Sagemaker Jupyter Notebook 的内存中。当我提交 10 或 20 名工人时,一切顺利。但是,当我提交 100 个工作人员时,其中 30% 到 50% 的工作人员遇到以下错误:“无法找到凭据”

最初我尝试使用 Boto3。为了尝试消除此问题,我切换到 S3FS,但发生了同样的错误。

如果我重复实验,出现 NoCredentialError 错误的工作人员是随机的,失败下载的确切数量也是如此。

Sagemaker 通过其 IAM 角色处理所有 AWS 凭证,因此我无法访问密钥对或任何东西。~/.aws/config 文件仅包含默认位置 - 与凭据无关。

似乎这是 Dask 的一个非常常见的用途,所以它显然能够执行这样的任务——我哪里出错了?

任何帮助将非常感激!下面的代码和回溯。在此示例中,有 29 名工作人员因凭据而失败。谢谢,帕特里克

输出:

0 投票
2 回答
365 浏览

python - 当前正在针对此资源进行有冲突的条件操作。(已创建存储桶)

使用 s3fs,我将文件上传到已创建的 s3 存储桶(不删除存储桶)。执行时,抛出以下错误:

[Operation Aborted]: A conflicting conditional operation is currently in progress against this resource.

但是,我只想将泡菜文件转储到已经存在的存储桶中,而不是为每个转储创建一个存储桶。

在这方面找不到有用的答案。