为什么在排序时必须转换RDD [Int]的元素?

时间:2017-11-05 15:27:19

标签: scala apache-spark

为什么我必须将RDD[Int]的元素转换为IntString才能将它与sortBy(Spark 1.6)一起使用?

例如这给了我一个错误

val t = sc.parallelize(1 to 9) //t: org.apache.spark.rdd.RDD[Int]
t.sortBy(_, ascending=false) //error: missing parameter type ...

而这是有效的

t.sortBy(_.toInt, ascending=false).collect //Array[Int] = Array(9, 8, 7, 6, 5, 4, 3, 2, 1)

t.sortBy(_.toString,ascending=false).collect //Array[Int] = Array(9, 8, 7, 6, 5, 4, 3, 2, 1)

为什么投放到toString以上返回Array[Int]而不是Array[String]Array[Char]

刚开始学习火花,所以请放轻松我: - )。

1 个答案:

答案 0 :(得分:2)

这是范围问题,如Underscore in Named Arguments所述,并在错误消息中暗示:

missing parameter type for expanded function 
  ((x$1) => t.sortBy(x$1, ascending = false)) 

您可以改为使用identity

t.sortBy(identity, ascending=false)
  

为什么在上面转换toString会返回Array [Int]而不是Array [String]或Array [Char]?

因为_.toString仅用于比较,而不是用于转换数据。