Вы можете использовать boto3
для загрузки файла, но, учитывая, что вы работаете с фреймом данных и pandas
, вам следует подумать о dask
. Вы можете установить его через conda install dask s3fs
import dask.dataframe as dd
Читать с S3
df = dd.read_csv('s3://{}/{}'.format(bucket, data2read),
storage_options={'key': AWS_ACCESS_KEY_ID,
'secret': AWS_SECRET_ACCESS_KEY})
Обновлять
Теперь, если вы хотите использовать этот файл как pandas
фрейм данных, вы должны вычислить его как
df = df.compute()
Написать в S3
Чтобы выполнить обратную запись в S3, вы должны сначала загрузить свой df
в dask с номером раздела (необходимо указать), который вам нужен
df = dd.from_pandas(df, npartitions=N)
А потом вы можете загрузить на S3
df.to_csv('s3://{}/{}'.format(bucket, data2write),
storage_options={'key': AWS_ACCESS_KEY_ID,
'secret': AWS_SECRET_ACCESS_KEY})
Обновлять
Несмотря на то, что API
похож, to_csv
в pandas
не совпадает с dask
, в частности, последний имеет параметр storage_options
. Кроме того, dask
не сохраняет в уникальный файл. Позвольте мне объяснить: если вы решите писать в s3://my_bucket/test.csv
с помощью dask
, тогда вместо файла с именем test.csv
у вас будет папка с этим именем, содержащая N
файл, где N
- это количество разделов, которое мы решили ранее.
Заключительное примечание
Я понимаю, что может показаться странным сохранять в несколько файлов, но, учитывая, что dask
читать все файлы в папке, как только вы привыкнете, это может быть очень удобно.
person
rpanai
schedule
28.06.2019
to_csv
. Может быть, вы могли бы попробовать сохранить его как локальный файл, а затем загрузить его с помощьюrequests
? Или как-то преобразовать в строку? - person 101arrowz   schedule 28.06.2019