为什么我必须将RDD[Int]
的元素转换为Int
或String
才能将它与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]
?
刚开始学习火花,所以请放轻松我: - )。
答案 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
仅用于比较,而不是用于转换数据。