pyspark 使用python将数据块和 Dataframe 写入S3

pftdvrlh  于 2023-03-11  发布在  Spark
关注(0)|答案(1)|浏览(166)

我有一个名为df的databricks Dataframe 。我想将其作为csv文件写入S3存储桶。我有S3存储桶名称和其他凭据。我查看了此处提供的联机文档https://docs.databricks.com/spark/latest/data-sources/aws/amazon-s3.html#mount-aws-s3,它要求使用以下命令

dbutils.fs.mount(s"s3a://$AccessKey:$SecretKey@$AwsBucketName", s"/mnt/$MountName", "sse-s3")

dbutils.fs.put(s"/mnt/$MountName", "<file content>")

但是我拥有的是 Dataframe 而不是文件,我该如何实现呢?

pdtvr36n

pdtvr36n1#

我也有同样的问题。我找到了两个解决方案

第一次

df
.write \
.format("com.databricks.spark.csv") \
.option("header", "true") \
.save("s3a://{}:{}@{}/{}".format(ACCESS_KEY, SECRET_KEY, BUCKET_NAME, DIRECTORY)))

效果很好。

第二次

您确实可以挂载一个S3 Bucket,然后直接向其写入一个文件,如下所示:

#### MOUNT AND READ S3 FILES
AWS_BUCKET_NAME = "your-bucket-name"
MOUNT_NAME = "a-directory-name"
dbutils.fs.mount("s3a://%s" % AWS_BUCKET_NAME, "/mnt/%s" % MOUNT_NAME)
display(dbutils.fs.ls("/mnt/%s" % MOUNT_NAME))

#### WRITE FILE 

df.write.save('/mnt/{}/{}'.format(MOUNT_NAME, "another-directory-name"), format='csv')

这也将同步到您的S3 Bucket。

相关问题