问题:spark sql / dataframe 日常操作中经常需要全局二次排序或者说针对多个字段排序然后输出到一个文件中,直接使用 order by 达不到想要的结果,只是分区内有序。
解决:在sql中使用
distribute by A_字段 sort by A_字段,B_字段
如果是dataframe,就先将dataframe注册为临时表,再使用sql
df.createOrReplaceTempView("temp_tb")
spark.sql("select * from temp_tb distribute by A_字段 sort by A_字段, B_字段")
.repartition( 1)
.write.mode("overwrite")
.option("header", "true")
.option("mapreduce.fileoutputcommitter.marksuccessfuljobs","false")
.csv(outputLocation)
博客内容讲述了在SparkSQL和DataFrame操作中,如何实现全局二次排序和多字段排序,并将结果输出到文件。通常orderby仅能实现分区内的排序,而通过结合distributeBy和sortBy以及repartition可以达成全局有序。具体解决方案是首先使用distributeBy和sortBy对数据进行排序,然后通过创建临时表执行SQL,最后使用repartition(1)确保所有数据都在一个分区上,从而达到全局排序的效果。最后,使用write模式将排序后的数据以CSV格式保存到指定输出路径。

2200

被折叠的 条评论
为什么被折叠?



