将Dataframe保存到S3的Pyspark方法

14

我想将数据框保存到S3,但是当我将文件保存到S3时,它会创建一个名为${folder_name}的空文件夹,我希望在其中保存文件。

保存数据框的语法:

f.write.parquet("s3n://bucket-name/shri/test")

它将文件保存在测试文件夹中,但它会在shri下创建一个$test文件夹。

有没有办法在不创建额外文件夹的情况下保存它?


为了编写一个文件,您需要使用一个执行器和一个减速器,这违背了Spark分布式本质的目的。 - OneCricketeer
1
@cricket_007的评论有一定道理。为了写入一个文件,你需要一个分区。你可以利用Spark的分布式特性,在导出到CSV之前使用df.coalesce(1)返回到一个分区。就你所说的,如果你使用一个分区来写出,一个执行器将被用来写入,如果数据量很大,这可能会影响性能。 - Tanner Clark
2个回答

27
我能够通过使用以下代码做到这一点。

df.write.parquet("s3a://bucket-name/shri/test.parquet",mode="overwrite")

感谢Usman的回复,是否需要导入任何模块?因为我尝试了相同的操作,但出现了错误。Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'overwrite' is not defined - Shrikant
4
给定覆盖值的引号,例如 mode='overwrite'。 - Usman Azhar

4
据我所知,目前没有办法控制实际的parquet文件命名。当你将dataframe写入parquet时,你只能指定目录名称,spark会在该目录下创建相应的parquet文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接