将Pandas数据框加载到S3并传递s3_additional_kwargs

4

请原谅我在这个领域的无知/缺乏知识!

我想要将一个数据框上传到S3,但是我需要传递'ACL':'bucket-owner-full-control'。

import pandas as pd
import s3fs

fs = s3fs.S3FileSystem(anon=False, s3_additional_kwargs={'ACL': 'bucket-owner-full-control'})
df = pd.DataFrame()
df['test'] = [1,2,3]
df.head()

df.to_parquet('s3://path/to/file/df.parquet', compression='gzip')


我已经通过将其加载到Pyarrow表中,再像这样加载来解决了这个问题:
import pyarrow.parquet as pq

table = pa.Table.from_pandas(df)

pq.write_to_dataset(table=table, 
                    root_path='s3://path/to/file/',
                    filesystem=fs) 

但是这种做法感觉很不专业,我认为在第一个示例中必须有一种方法来传递ACL。
3个回答

2

在Pandas 1.2.0中,可以使用storage_options参数,具体信息请参见此处。

如果你使用的是Pandas版本低于1.2.0(例如我的情况是1.1.3),可以尝试以下技巧:

storage_options = dict(anon=False, s3_additional_kwargs=dict(ACL="bucket-owner-full-control"))

import s3fs
fs = s3fs.S3FileSystem(**storage_options)
df.to_parquet('s3://foo/bar.parquet', filesystem=fs)

0

你可以做到:

pd.to_parquet('name.parquet',storage_options={"key":xxxxx,"secret":gcp_secret_access_key,'xxxxx':{'ACL': 'bucket-owner-full-control'}})

0
如前所述,Pandas 1.2.0 版本中的大多数写入函数(例如 to_csv、to_parquet 等)都有一个 storage_options 参数。要在写入 S3 时设置 ACL(在这种情况下使用的是 s3fs 文件系统后端),您可以使用以下示例:
ACL = dict(storage_options=dict(s3_additional_kwargs=dict(ACL='bucket-owner-full-control')))

import pandas as pd
df = pd.DataFrame({"column": [1,2,3,4]})
df.to_parquet("s3://bucket/file.parquet", **ACL)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接