将数据从 S3 加载到 dask 数据帧
Loading data from S3 to dask dataframe
制作文件public后,将"anon"参数改为True才能加载数据public。
df = dd.read_csv('s3://mybucket/some-big.csv', storage_options = {'anon':False})
由于显而易见的原因,不推荐这样做。如何安全地从 S3 加载数据?
从 s3 加载数据的后端是 s3fs,它有一个关于凭据的部分 here,主要指向 boto3 的文档。
简短的回答是,有许多方法可以提供 S3 凭据,其中一些是自动的(位于正确位置的文件,或环境变量 - 所有工作人员都必须可以访问,或集群元数据服务).
或者,您可以直接在调用中提供您的key/secret,但这当然意味着您信任您的执行平台和工作人员之间的沟通
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
如果您在虚拟私有云 (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)
可以找到 dask 的完整文档here
Dask 底层使用 boto3,因此您几乎可以使用 boto3 支持的所有方式设置您的密钥,例如基于角色的导出 AWS_PROFILE=xxxx 或通过您的环境变量显式导出访问密钥和秘密。我建议不要对您的密钥进行硬编码,至少您会将您的代码错误地暴露给 public 。
$ 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))
制作文件public后,将"anon"参数改为True才能加载数据public。
df = dd.read_csv('s3://mybucket/some-big.csv', storage_options = {'anon':False})
由于显而易见的原因,不推荐这样做。如何安全地从 S3 加载数据?
从 s3 加载数据的后端是 s3fs,它有一个关于凭据的部分 here,主要指向 boto3 的文档。
简短的回答是,有许多方法可以提供 S3 凭据,其中一些是自动的(位于正确位置的文件,或环境变量 - 所有工作人员都必须可以访问,或集群元数据服务).
或者,您可以直接在调用中提供您的key/secret,但这当然意味着您信任您的执行平台和工作人员之间的沟通
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
如果您在虚拟私有云 (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)
可以找到 dask 的完整文档here
Dask 底层使用 boto3,因此您几乎可以使用 boto3 支持的所有方式设置您的密钥,例如基于角色的导出 AWS_PROFILE=xxxx 或通过您的环境变量显式导出访问密钥和秘密。我建议不要对您的密钥进行硬编码,至少您会将您的代码错误地暴露给 public 。
$ 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))