在一个文件中对Spark RDD进行排序和排序

时间:2018-11-20 06:21:49

标签: scala apache-spark rdd

我的火花RDD如下

(maths,60)
(english,65)
(english,77)
(maths,23)
(maths,50)

我需要对给定的RDD进行排序和排序,如下所示 (数学,23,1) (数50,2) (数50,3) (英语,65,1) (english,77,2)

我知道可以使用Data Frame轻松完成此操作,但是我需要Spark rdd代码才能获得解决方案,请提出建议

2 个答案:

答案 0 :(得分:1)

Spark RDD 函数(所谓的转换),例如groupByKey flatMap Scala List 函数,例如{ {1}}应该有助于实现这一目标。

sorted

Databricks notebook

答案 1 :(得分:0)

另一种rdd解决方案:

val df = Seq(("maths",60),("english",65),("english",77),("maths",23),("maths",50)).toDF("subject","marks")
val rdd1 = df.rdd
rdd1.groupBy( x=> x(0))
  .map( x=> 
      {
         val p = x._2.toList.map(a=>a(1)).map(_.toString.toInt).sortWith((a1,a2)=> a1 < a2 ).zipWithIndex.map(b=>(b._1,b._2+1))
        (x._1,p) 
      }
  )
  .flatMap( x => x._2.map((x._1,_)))
  .collect.foreach(println)

结果:

(english,(65,1))
(english,(77,2))
(maths,(23,1))
(maths,(50,2))
(maths,(60,3))