从S3加载数据到dask dataframe

5

只有在将文件设为公共后,我才能加载数据,而且必须将“anon”参数更改为True。

df = dd.read_csv('s3://mybucket/some-big.csv',  storage_options = {'anon':False})

出于明显的原因,这不是推荐的做法。我该如何安全地从S3加载数据?

3个回答

8

负责从S3加载数据的后端是s3fs,并且它有一个涉及凭证的部分这里,大多数情况下会引导您查看boto3的文档。

简而言之,提供S3凭证的方法有很多种,其中一些是自动的(在正确位置上的文件,或环境变量——必须对所有工作器可访问,或群集元数据服务)。

此外,您可以直接在调用中提供密钥/密码,但这当然必须意味着您信任执行平台和工作器之间的通信。

df = dd.read_csv('s3://mybucket/some-big.csv',  storage_options = {'key': mykey, 'secret': mysecret})

您可以在使用s3fs时传递的storage_options中找到一组参数,详见API文档
有关更多信息,请参阅http://docs.dask.org/en/latest/remote-data-services.html

4

如果您在您的虚拟私有云(VPC)中,s3可能已经得到授权,您可以在没有密钥的情况下读取文件:

import dask.dataframe as dd
df = dd.read_csv('s3://<bucket>/<path to file>.csv')

如果您没有凭据,可以使用 storage_options 参数,并传递一个键值对(key 和 secret):

import dask.dataframe as dd
storage_options = {'key': <s3 key>, 'secret': <s3 secret>}
df = dd.read_csv('s3://<bucket>/<path to file>.csv', storage_options=storage_options)

您可以在这里找到Dask的完整文档,其中包含与远程数据服务相关的信息。


0
Dask在底层使用boto3,因此您可以使用boto3支持的所有方式设置密钥,例如基于角色的导出AWS_PROFILE=xxxx或通过环境变量明确导出访问密钥和秘密。我建议不要硬编码您的密钥,以免因错误而将代码暴露给公众。
$ export AWS_PROFILE=your_aws_cli_profile_name

或者

https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html

对于s3,您可以使用通配符匹配来获取多个分块文件

import dask.dataframe as dd

# Given N number of csv files located inside s3 read and compute total record len

s3_url = 's3://<bucket_name>/dask-tutorial/data/accounts.*.csv'

df = dd.read_csv(s3_url)

print(df.head())

print(len(df))

1
在处理 Parquet 文件时,Dask 一次可以读取的 S3 文件数量是否有最大限制? - Dcook

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