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



为什么我必须强制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]

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

这是一个范围问题,如下所述 命名参数中的下划线 并由错误消息提示:

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

您可以改用identity

t.sortBy(identity, ascending=false)

为什么它被转换为上面的toString返回数组[Int]而不是数组[字符串]或数组[字符]?

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

最新更新