Pandas read_csv укажите профиль AWS

Панды (v1.0.5) используют s3fsбиблиотека для подключения к AWS S3 и чтения данных. По умолчанию s3fs использует учетные данные из~/.aws/credentials файл в defaultпрофиль. Как указать, какой профиль использовать pandas при чтении CSV из S3?

Например.

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 объекта. Оставить вопрос открытым, чтобы увидеть, есть ли другой более чистый / простой метод.

5 ответов

      df = pd.read_csv(s3_path, storage_options=dict(profile='profile2'))

Если вам нужно использовать только один профиль, установка переменной среды "AWS_DEFAULT_PROFILE" работает:

      import os
os.environ["AWS_DEFAULT_PROFILE"] = "profile2"
df = pd.read_csv(path_to_s3_csv)
import s3fs
s3 = s3fs.S3FileSystem(anon=False, profile_name="your-profile-name")

Я считаю, что не использовать boto, вы можете использовать эту часть S3FileSystem из s3fs. Затем с помощью обработчика файлов, например:

with s3.open('bucket/file.txt', 'rb') as f:

Я не уверен, что это «лучше», но, похоже, он работает для меня, используя boto3 напрямую, без необходимости использовать s3fs или установите переменную env.

      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'))

Если вы не можете настроить файл .aws/config:

      import pandas as pd
import s3fs

KEY_ID = 'xxxx'
ACCESS_KEY = 'yyyy'
BUCKET = 'my-bucket'
fp = 's3://my-bucket/test/abc.csv'


fs = s3fs.S3FileSystem(anon=False, key=KEY_ID, secret=ACCESS_KEY)
with fs.open(fp) as f:
   df = pd.read_csv(f)
Другие вопросы по тегам