将数据从S3加载到dask数据框

时间:2019-01-14 08:06:40

标签: python dask dask-distributed

仅当文件公开后将“ anon”参数更改为True时,才能加载数据。

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

出于明显原因,不建议这样做。如何安全地从S3加载数据?

3 个答案:

答案 0 :(得分:2)

从s3加载数据的后端是s3fs,它有一个关于凭证here的部分,主要是指向boto3的文档。

简而言之,提供S3凭据的方式有很多,其中一些是自动的(正确位置的文件或环境变量-所有工作人员或集群元数据服务都必须可以访问)。

或者,您可以直接在呼叫中提供密钥/秘密,但这当然必须意味着您信任执行平台和工作人员之间的通信

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

在使用s3fs时可以在storage_options中传递的参数集可以在API docs中找到。

一般参考http://docs.dask.org/en/latest/remote-data-services.html

答案 1 :(得分:2)

如果您位于虚拟私有云(VPC)中,则s3很可能已经过认证,您可以在不使用密钥的情况下读取文件:

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

如果您没有凭据,则可以使用storage_options参数并传递密钥对(密钥和密钥):

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)

可以从here那里找到完整的dask文档

答案 2 :(得分: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))