为什么我必须强制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]
?
刚开始学习火花,所以请对我放轻松:-)。
这是一个范围问题,如下所述 命名参数中的下划线 并由错误消息提示:
missing parameter type for expanded function
((x$1) => t.sortBy(x$1, ascending = false))
您可以改用identity
:
t.sortBy(identity, ascending=false)
为什么它被转换为上面的toString返回数组[Int]而不是数组[字符串]或数组[字符]?
因为_.toString
仅用于比较,而不是用于转换数据。