问题: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)