У меня есть фрейм данных dask dask_df, который я хочу сохранить непосредственно в S3 без преобразования в панды (dask_df.compute()), поскольку он слишком большой. Проблема в том, что строковый ввод-вывод выдает ошибку, когда я пытаюсь сделать следующее:

import boto3
from boto3 import session, client
import dask.dataframe as dd
import datetime

today = date.today()    

client = boto3.client('s3')
bucket = 'test-bucket'
prefix = 'foldername/'
csv_buffer = StringIO()
dask_df.to_csv(csv_buffer)
filename = 'filename_{}.csv'.format(today)

response = client.put_object(
    ACL = 'private',
    Body = csv_buffer.getvalue(),
    Bucket = bucket,
    Key = prefix+filename
    )

Это ошибка, которую я получаю -

Поднять TypeError ( "тип URL-адреса не распознан: %s"% urlpath")

TypeError: тип URL-адреса не распознан: <_io.StringIO object at 0x7f830e6b5550>

0
lightyagami96 25 Сен 2020 в 22:56

1 ответ

Лучший ответ

docstring делает НЕ говорите, что вы можете писать в StringIO; действительно, разве вы не ожидали, что это заполнит вашу память?

К счастью, Даск сделал всю работу за вас, и вы можете сделать

dask_df.to_csv("s3://test-bucket/foldername/filename_*.csv")

Вот и все.

См. Также: удаленные данные и Dask

1
mdurant 25 Сен 2020 в 21:00