记录下Spark分组排序时遇到的问题,需求问题如下:
当前有HDFS文件数据内容为:
(字段顺序为手机号-phone、用户ID-userId、线路-line、时间戳-clientTimestamp),然后读取HDFS文件内容生成rdd,其中rdd的格式为( (phone,userId,line))
130xxxxxxxx&1980098385910287364&1004&1568528894
130xxxxxxxx&2233727976012209153&1005&1568555149
130xxxxxxxx&2320761066814396420&1002&1568515662
130xxxxxxxx&1956824763490556928&1005&1568538553
130xxxxxxxx&2255034634315076610&1001&1568528871
1、使用Spark DataFrame完成分组排序(推荐)
val userLineDF = rdd.map( x=>{((x._2,x._3),1)}).reduceByKey(_+_).map(x=>(x._1._1,x._1._2,x._2)).toDF("userId","line","rideCount")
val dfTop1 = userLineDF.withColumn("rank",row_number().over(Window.partitionBy("userId").orderBy(desc("rideCoun