将 AWS S3 连接到 Databricks PySpark
Posted
技术标签:
【中文标题】将 AWS S3 连接到 Databricks PySpark【英文标题】:Connect AWS S3 to Databricks PySpark 【发布时间】:2019-11-04 14:02:18 【问题描述】:我正在尝试使用 databricks pyspark 从 s3 存储桶连接和读取我的所有 csv 文件。当我使用具有管理员访问权限的存储桶时,它可以正常工作
data_path = 's3://mydata_path_with_adminaccess/'
但是当我尝试连接到一些需要 ACCESS_KEY_ID 和 SECRET_ACCESS_KEY 的存储桶时,它将无法工作并且访问被拒绝:
我试过了:
data_path = 's3://mydata_path_without_adminaccess/'
AWS_ACCESS_KEY_ID='my key'
AWS_SECRET_ACCESS_KEY='my key'
和:
data_path = ='s3://<MY_ACCESS_KEY_ID>:<My_SECRET_ACCESS_KEY>@mydata_path_without_adminaccess
【问题讨论】:
【参考方案1】:我不确定您是否尝试过使用 secret 和 keys 将存储桶安装在数据块中,但值得尝试:
这是相同的代码:
ACCESS_KEY = dbutils.secrets.get(scope = "aws", key = "aws-access-key")
SECRET_KEY = dbutils.secrets.get(scope = "aws", key = "aws-secret-key")
ENCODED_SECRET_KEY = SECRET_KEY.replace("/", "%2F")
AWS_BUCKET_NAME = "<aws-bucket-name>"
MOUNT_NAME = "<mount-name>"
dbutils.fs.mount("s3a://%s:%s@%s" % (ACCESS_KEY, ENCODED_SECRET_KEY, AWS_BUCKET_NAME), "/mnt/%s" % MOUNT_NAME)
display(dbutils.fs.ls("/mnt/%s" % MOUNT_NAME))
然后您可以像访问本地文件一样访问 S3 存储桶中的文件:
df = spark.read.text("/mnt/%s/...." % MOUNT_NAME)
补充参考:
https://docs.databricks.com/data/data-sources/aws/amazon-s3.html
希望对你有帮助。
【讨论】:
谢谢。我也尝试安装,但收到错误“范围不存在秘密:aws 和密钥”。虽然我可以将我的 python 会话与该密钥连接起来!【参考方案2】:要使用访问密钥将 S3 与数据块连接,您只需将 S3 挂载到数据块上即可。它在数据块中创建指向您的 S3 存储桶的指针。 如果您已经有一个秘密存储在数据块中,请按以下方式检索它:
access_key = dbutils.secrets.get(scope = "aws", key = "aws-access-key")
secret_key = dbutils.secrets.get(scope = "aws", key = "aws-secret-key")
如果您没有存储在 Databricks 中的秘密,请尝试下面的代码以避免“秘密不存在于范围内”错误
access_key = "your-access-key"
secret_key = "your-secret-key"
#Mount bucket on databricks
encoded_secret_key = secret_key.replace("/", "%2F")
aws_bucket_name = "s3-bucket-name"
mount_name = "Mount-Name"
dbutils.fs.mount("s3a://%s:%s@%s" % (access_key, encoded_secret_key, aws_bucket_name), "/mnt/%s" % mount_name)
display(dbutils.fs.ls("/mnt/%s" % mount_name))
如下访问您的 S3 数据
mount_name = "mount-name"
file_name="file name "
df = spark.read.text("/mnt/%s/%s" % (mount_name , file_name))
df.show()
【讨论】:
以上是关于将 AWS S3 连接到 Databricks PySpark的主要内容,如果未能解决你的问题,请参考以下文章
AWS s3bucket“只能将str(不是“NoneType”)连接到str”
将 Databricks 集群与本地计算机 (AWS) 连接
如何将 S3 托管的前端连接到 Elastic beanstalk 托管的后端?