将 sparkdataframe 写入 S3 中的 .csv 文件并在 pyspark 中选择一个名称
Writing a sparkdataframe to a .csv file in S3 and choose a name in pyspark
我有一个数据框,我打算在 S3 中将它写成一个 .csv 文件
我使用以下代码:
df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly",mode='overwrite',header=True)
它在 product_profit_weekly 文件夹中放置了一个 .csv 文件,目前 .csv 文件在 S3 中的名称很奇怪,我可以在编写时选择一个文件名吗?
所有 spark 数据帧编写器 (df.write.___) 不会写入单个文件,而是每个分区写入一个块。我想你得到的是一个名为
的目录
df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly
还有一个名为
的文件
part-00000
在这种情况下,您正在做的事情可能非常低效而且不是很 "sparky" -- 您正在将所有数据帧分区合并为一个,这意味着您的任务实际上并不是并行执行的!
这是一个不同的模型。利用所有 spark 并行化,这意味着不要合并,并并行写入某个目录。
如果你有 100 个分区,你将得到:
part-00000
part-00001
...
part-00099
如果您需要将所有内容都放在一个平面文件中,请编写一个小函数以在事后合并它。您可以在 scala 中执行此操作,也可以在 bash 中执行此操作:
cat ${dir}.part-* > $flatFilePath
我有一个数据框,我打算在 S3 中将它写成一个 .csv 文件 我使用以下代码:
df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly",mode='overwrite',header=True)
它在 product_profit_weekly 文件夹中放置了一个 .csv 文件,目前 .csv 文件在 S3 中的名称很奇怪,我可以在编写时选择一个文件名吗?
所有 spark 数据帧编写器 (df.write.___) 不会写入单个文件,而是每个分区写入一个块。我想你得到的是一个名为
的目录df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly
还有一个名为
的文件part-00000
在这种情况下,您正在做的事情可能非常低效而且不是很 "sparky" -- 您正在将所有数据帧分区合并为一个,这意味着您的任务实际上并不是并行执行的!
这是一个不同的模型。利用所有 spark 并行化,这意味着不要合并,并并行写入某个目录。
如果你有 100 个分区,你将得到:
part-00000
part-00001
...
part-00099
如果您需要将所有内容都放在一个平面文件中,请编写一个小函数以在事后合并它。您可以在 scala 中执行此操作,也可以在 bash 中执行此操作:
cat ${dir}.part-* > $flatFilePath