你可以使用 boto3
来上传文件,但是,考虑到你正在使用 dataframe 和 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
相似,但是 pandas
中的 to_csv
和 dask
中的不同,特别是后者有一个 storage_options
参数。此外,dask
没有保存到唯一文件的功能。让我解释一下:如果您决定使用 dask
写入到 s3://my_bucket/test.csv
,那么您将会得到一个名为该名称的文件夹,其中包含我们之前决定的分区数 N
个文件。
最终说明
我了解保存到多个文件可能会感觉奇怪,但是考虑到 dask
会读取文件夹中的所有文件,一旦习惯了这种方式,它会非常方便。