在s3中将sparkdataframe写入.csv文件,并在pyspark中选择一个名称

8gsdolmq  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(860)

我有一个Dataframe和一个我将在s3中编写一个.csv文件我使用以下代码:

df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly",mode='overwrite',header=True)

它把一个.csv文件放在product\u profit\u weekly文件夹中,目前.csv文件在s3中有一个奇怪的名字,我写它的时候可以选择一个文件名吗?

pgky5nke

pgky5nke1#

所有的sparkDataframe写入程序(df.write.\uuuu)都不会写入单个文件,而是为每个分区写入一个块。我想你得到的是一个名为

df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly

里面有一个文件叫

part-00000

在这种情况下,您所做的事情可能效率很低,而且不太“有Spark”——您将所有Dataframe分区合并到一个分区中,这意味着您的任务实际上没有并行执行!
这是一个不同的模型。利用所有spark并行化,这意味着不合并,并并行写入某个目录。
如果您有100个分区,您将得到:

part-00000
part-00001
...
part-00099

如果你需要把所有的东西都放在一个平面文件中,那就编写一个小函数来合并它。您可以在scala中执行此操作,也可以在bash中使用:

cat ${dir}.part-* > $flatFilePath

相关问题