Запись pandas данных в S3 - PullRequest
1 голос
/ 16 апреля 2020

У меня есть AWS Лямбда-функция, которая запрашивает API и создает фрейм данных. Я хочу записать этот файл в корзину S3, я использую:

import pandas as pd
import s3fs

df.to_csv('s3.console.aws.amazon.com/s3/buckets/info/test.csv', index=False)

Я получаю ошибку:

Нет такого файла или каталога: 's3.console. aws .amazon.com / s3 / buckets / info / test.csv'

Но этот каталог существует потому что я читаю файлы оттуда. В чем здесь проблема?

Я читал предыдущие файлы, как это:

s3_client = boto3.client('s3')
s3_client.download_file('info', 'secrets.json', '/tmp/secrets.json')

Как я могу загрузить весь фрейм данных в корзину S3?

Ответы [ 2 ]

6 голосов
/ 20 апреля 2020

Это

"s3.console. aws .amazon.com / s3 / buckets / info / test.csv"

не является S3 URI , вам нужно передать S3 URI для сохранения в s3. Более того, вам не нужно импортировать s3fs (вам нужно только установить его),

Просто попробуйте:

import pandas as pd

df = pd.DataFrame()
# df.to_csv("s3://<bucket_name>/<obj_key>")

# In your case
df.to_csv("s3://info/test.csv")

ПРИМЕЧАНИЕ. Сначала нужно создать корзину на aws s3.

2 голосов
/ 21 апреля 2020

Вы можете использовать пакет boto3 также для хранения данных в S3 :

from io import StringIO  # python3 (or BytesIO for python2)
import boto3

bucket = 'info'  # already created on S3
csv_buffer = StringIO()
df.to_csv(csv_buffer)

s3_resource = boto3.resource('s3')
s3_resource.Object(bucket, 'df.csv').put(Body=csv_buffer.getvalue())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...