我有一个public abstract class addressDecorator extends GridPane implements addressbookInterface {
public addressbookInterface address;
public addressDecorator(addressbookInterface address) {
this.address = address;
}
@Override
public addressbookInterface getAddressBookPane() {
return address;
}
}
类型的RDD点,并且必须针对每一列进行迭代排序。要排序的列存储在变量'[(Double, Double)]
'中,并根据RDD是按第1列还是按第2列对RDD进行排序,得出的值为0或1。我尝试了以下方法,但似乎都不起作用:
axis
或
val sorted = points.sortBy(p => p._(axis))
我收到以下错误: val sorted = points.sortBy(_(axis))
涉及默认参数的应用程序中发生错误。
在这方面的任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
您可以使用productElement
方法来动态访问元组的元素。
唯一的问题是此方法返回一个Any
,因此您需要将其转换为Double
(为此,您需要首先将Any
转换为{{1 }})
尝试一下:
String
示例
输入
points.sortBy(_.productElement(axis).toString.toDouble)
AXIS = 1
points.foreach(println)
(0,1)
(1,0)
AXIS = 0
scala> val axis= 1
axis: Int = 1
scala> points.sortBy(_.productElement(axis).toString.toDouble)
res19: org.apache.spark.rdd.RDD[(Int, Int)] = MapPartitionsRDD[16] at sortBy at <console>:28
scala> res19.foreach(println)
(1,0)
(0,1)
答案 1 :(得分:1)
您可以这样做:
def sortValue(axis: Int)(p: (Double, Double)) = if (axis == 0) p._1 else p._2
val sorted = points.sortBy(p => sortValue(axis)(p))