vee*_*til 9 python-3.x pandas jupyter-notebook minio
我在本地托管了 Minio 服务器。我需要使用 pandas 使用 S3 URL(例如 Jupyter 笔记本中的“s3://dataset/wine-quality.csv”)从 minio s3 存储桶读取文件。
我尝试使用 s3 boto3 库能够下载文件。
import boto3
s3 = boto3.resource('s3',
endpoint_url='localhost:9000',
aws_access_key_id='id',
aws_secret_access_key='password')
s3.Bucket('dataset').download_file('wine-quality.csv', '/tmp/wine-quality.csv')
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用 pandas 时,
data = pd.read_csv("s3://dataset/wine-quality.csv")
Run Code Online (Sandbox Code Playgroud)
我收到客户端错误,禁止 403。我知道 pandas 内部使用 boto3 库(如果错误请纠正我)
PS:Pandas read_csv 还有一个参数,“ storage_options={ "key": AWS_ACCESS_KEY_ID, "secret": AWS_SECRET_ACCESS_KEY, "token": AWS_SESSION_TOKEN, }"。但我找不到任何配置来传递自定义 Minio 主机 URL 供 pandas 读取。
Ash*_*dhu 10
Pandas v1.2 及以上版本允许您传递存储选项fsspec
,这些选项会传递到 ,请参阅此处的文档:https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html ?highlight=s3fs#reading-写入远程文件。
要传入自定义 url,您需要通过client_kwargs
in指定它storage_options
:
df = pd.read_csv(
"s3://dataset/wine-quality.csv",
storage_options={
"key": AWS_ACCESS_KEY_ID,
"secret": AWS_SECRET_ACCESS_KEY,
"token": AWS_SESSION_TOKEN,
"client_kwargs": {"endpoint_url": "localhost:9000"}
}
)
Run Code Online (Sandbox Code Playgroud)