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

时间:2016-10-28 12:56:29

标签: apache-spark amazon-s3 apache-spark-sql spark-dataframe pyspark-sql

我有一个数据帧,我打算在S3中写一个.csv文件 我使用以下代码:

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

它将一个.csv文件放在product_profit_weekly文件夹中,目前.csv文件在S3中有一个已知的名称,我可以在编写时选择一个文件名吗?

1 个答案:

答案 0 :(得分:3)

所有spark数据帧编写器(df.write .___)都不会写入单个文件,而是每个分区写一个块。我想你得到的是一个名为

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

和一个名为

的文件
part-00000

在这种情况下,您正在做一些非常低效且不太“闪亮”的事情 - 您将所有数据帧分区合并为一个,这意味着您的任务实际上并未并行执行!

这是一个不同的模型。利用所有火花并行化,这意味着不要合并,并且并行写入某个目录。

如果您有100个分区,您将获得:

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

如果您需要一个平面文件中的所有内容,请编写一个小函数以在事后合并它。您可以在scala中执行此操作,也可以使用以下命令执行bash:

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