3

Pandas (v1.0.5) 使用s3fs库连接 AWS S3 并读取数据。默认情况下,s3fs 使用~/.aws/credentials在配置文件中的文件中找到的凭据default。从 S3 读取 CSV 时,如何指定 pandas 应该使用哪个配置文件?

例如。

s3_path = 's3://mybucket/myfile.csv'
df = pd.read_csv(s3_path)
$ cat ~/.aws/credentials
[default]
aws_access_key_id = ABCD
aws_secret_access_key = XXXX
[profile2]
aws_access_key_id = PQRS
aws_secret_access_key = YYYY
[profile3]
aws_access_key_id = XYZW
aws_secret_access_key = ZZZZ

编辑 :

当前的黑客/工作解决方案:

import botocore
import s3fs
session = botocore.session.Session(profile='profile2')
s3 = s3fs.core.S3FileSystem(anon=False, session=session)
df = pd.read_csv( s3.open(path_to_s3_csv) )

上述解决方案的唯一问题是您需要导入 2 个不同的库并实例化 2 个对象。保持问题开放,看看是否有另一种更清洁/简单的方法。

4

3 回答 3

2
import s3fs
s3 = s3fs.S3FileSystem(anon=False, profile_name="your-profile-name")

我相信不使用 boto,您可以使用 s3fs 的这个 S3FileSystem 部分。然后使用文件处理程序,例如:

with s3.open('bucket/file.txt', 'rb') as f:
于 2020-06-24T19:58:47.393 回答
0

我不确定这是否“更好”,但它似乎对我直接使用 boto3 有效,而无需使用s3fs或设置环境变量。

import boto3
import pandas as pd

s3_session = boto3.Session(profile_name="profile_name")
s3_client = s3_session.client("s3")
df = pd.read_csv(s3_client.get_object(Bucket='bucket', Key ='key.csv').get('Body'))
于 2021-04-15T22:35:19.797 回答
0

如果您只需要使用一个配置文件,则设置环境变量“AWS_DEFAULT_PROFILE”有效:

import os
os.environ["AWS_DEFAULT_PROFILE"] = "profile2"
df = pd.read_csv(path_to_s3_csv)
于 2021-03-30T09:11:06.920 回答