问题标签 [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.
python - Zarr:将 xarray 写入性能提高到 S3
将数据集写入xarray
AWS S3 会花费惊人的大量时间,即使实际上没有使用compute=False
.
这是一个例子:
即使没有实际计算,与 S3 存储桶位于同一区域的 EC2 也to_zarr
需要大约 6 秒的时间。
查看调试日志,似乎正在进行相当多的重定向,因为默认区域 inaiobotocore
设置为us-east-2
while bucket is in eu-central-1
。
如果我首先手动将默认区域放入环境变量中
然后所需时间下降到3.5 秒左右。
所以我的问题是:
有没有办法将该区域传递给
fsspec
(或s3fs
)?我已经尝试添加s3_additional_kwargs={"region":"eu-central-1"}
到该get_mapper
方法,但没有做任何事情。xarray
有没有比上面(with )更好的方式与 S3 上的 zarr 交互fsspec
?
版本:
python - 在 s3fs.S3FileSystem 中设置超时的正确方法是什么?
我尝试了各种方法来设置s3fs.S3FileSystem
对象的读取超时,例如
s3 = s3fs.S3FileSystem(s3_additional_kwargs={"read_timeout": 500}, config_kwargs={"read_timeout": 500} )
或者
s3.read_timeout = 500
但他们似乎都没有按预期控制超时。有谁知道设置这些类型参数的正确方法?
谢谢
python - 根据当前日期写入 S3 密钥
我正在尝试使用S3FileSystem
python 在 S3 中编写一个 csv。每次我写的时候,我都会在当前日期的一个键('%Y-%m -%d') 以便按日期组织数据。我在想这样,数据将按日期组织,同一天不会创建新密钥。
但看起来我跑了。如果我在今天的日期(2021-03-17)运行以下代码,2021-03-17
则第一次创建此密钥。2021-03-18
即使我在同一天运行它,下次它也会创建一个新密钥。
谁能建议如何解决这个问题?
完整代码如下
更新
这实际上有效。日期是 UTC,所以即使我的本地日期是相同的,日期在 UTC 中发生了变化,这造成了混乱。
amazon-web-services - python s3fs中的配置文件参数
我正在尝试在 python 中使用 s3fs 连接到 s3 存储桶。关联的凭据保存在 ~/.aws/credentials 中名为“pete”的配置文件中:
这似乎适用于 AWS CLI(在 Windows 上):
但是当我使用 python 中的 s3fs 包使用应该是等效的代码时,我得到一个权限被拒绝的错误:
我收到此错误:
我必须假设这不是 s3 中的配置问题,因为我可以通过 CLI 访问 s3。所以我的 s3fs 代码一定有问题,但我找不到关于 s3fs 中配置文件的大量文档来弄清楚发生了什么。任何帮助当然表示赞赏。
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
软件包已安装在我的笔记本中。而我其实已经用了很长时间了,突然发生了这种情况。我试过谷歌搜索,但找不到这个特定的错误。有没有人遇到过这个?如果是这样,您知道如何解决吗?
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
python - 读取 s3fs 文件对象时,h5py 很慢
我正在使用 h5py 和 s3fs 的以下组合从 Amazon S3 上的较大 HDF5 文件中读取几个小数据集。
这些读取速度相对较慢,似乎以这种方式读取单个数据集与在本地从 S3 存储桶复制整个文件然后读取数据集一样慢。我认为原因是 h5py 通过 s3fs 发送的查找和读取命令有很多开销。
有没有人有一个更优化方法的想法?(除了下载文件然后读取它,如果我想读取多个数据集会更快,但仍然太慢)
谢谢!
伊曼纽尔
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。
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 名工作人员因凭据而失败。谢谢,帕特里克
输出:
python - 当前正在针对此资源进行有冲突的条件操作。(已创建存储桶)
使用 s3fs,我将文件上传到已创建的 s3 存储桶(不删除存储桶)。执行时,抛出以下错误:
[Operation Aborted]: A conflicting conditional operation is currently in progress against this resource.
但是,我只想将泡菜文件转储到已经存在的存储桶中,而不是为每个转储创建一个存储桶。
在这方面找不到有用的答案。