只有在将文件设为公共后,我才能加载数据,而且必须将“anon”参数更改为True。
df = dd.read_csv('s3://mybucket/some-big.csv', storage_options = {'anon':False})
出于明显的原因,这不是推荐的做法。我该如何安全地从S3加载数据?
只有在将文件设为公共后,我才能加载数据,而且必须将“anon”参数更改为True。
df = dd.read_csv('s3://mybucket/some-big.csv', storage_options = {'anon':False})
出于明显的原因,这不是推荐的做法。我该如何安全地从S3加载数据?
负责从S3加载数据的后端是s3fs,并且它有一个涉及凭证的部分这里,大多数情况下会引导您查看boto3的文档。
简而言之,提供S3凭证的方法有很多种,其中一些是自动的(在正确位置上的文件,或环境变量——必须对所有工作器可访问,或群集元数据服务)。
此外,您可以直接在调用中提供密钥/密码,但这当然必须意味着您信任执行平台和工作器之间的通信。
df = dd.read_csv('s3://mybucket/some-big.csv', storage_options = {'key': mykey, 'secret': mysecret})
storage_options
中找到一组参数,详见API文档。如果您在您的虚拟私有云(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的完整文档,其中包含与远程数据服务相关的信息。
$ 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))