将 AWS S3 连接到 Databricks PySpark

Connect AWS S3 to Databricks PySpark

我正在尝试使用 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

我不太确定您是否尝试过使用密钥和密钥将存储桶安装到数据块中,但值得一试:

这是相同的代码:

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

希望对您有所帮助。

要使用访问密钥将 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()