我正在使用Spark的DAGScheduler中的Scala代码,并出现了与似乎是Tuple2的内容相匹配的问题。诚然,我对Scala不太了解,所以我遇到了一些麻烦。我有一个似乎是Tuple2的对象(至少在使用getClass方法时是这样报告的)。但是,我已经尝试了各种匹配语法以使其匹配。我正在尝试的代码如下:
def verify(resultArray: ArrayBuffer[Any]) {
logInfo("RESULTS STRING: "+resultArray(0).toString)
logInfo("RESULTS CLASS: "+resultArray(0).getClass)
resultArray(0) match {
case Tuple2 =>
logInfo("TUPLE2")
case Tuple2(_, _) =>
logInfo("TUPLE2(_, _)")
case (v1, v2) =>
logInfo("(v1, v2)")
case (_, _) =>
logInfo("(_, _)")
case tu: (_, _) =>
logInfo("tu: (_, _)")
case (s: String, i: Int) =>
logInfo("(s: String, i: Int)")
case _ =>
logInfo("_")
}或多或少,我尝试将我可以在web上找到的用于匹配元组的所有可能的匹配语法填入match语句中。然而,所有这些都不匹配。什么会被打印出来:
14/04/28 03:37:32 INFO Verifier: RESULTS STRING: [Lscala.Tuple2;@4627d044
14/04/28 03:37:32 INFO Verifier: RESULTS CLASS: class [Lscala.Tuple2;
14/04/28 03:37:32 INFO Verifier: _有人知道这里会发生什么事吗?或者有小费吗?
发布于 2014-04-28 04:45:31
因此,在上面的评论之后,我实现了如下内容:
def verify(resultArray: ArrayBuffer[Any]) {
val loop = new Breaks
var count = 0
var votes:Array[Int] = new Array[Int](4)
var i = 0
logInfo("RESULTS STRING: "+resultArray(0).toString)
logInfo("RESULTS CLASS: "+resultArray(0).getClass)
resultArray(0) match {
case Some(Int) =>
logInfo("Some(Int)")
case _ =>
logInfo("_")
resultArray(0).asInstanceOf[Array[Tuple2[_, _]]](0) match {
case (_, _) =>
logInfo("(_, _)")
val tuples = resultArray(0).asInstanceOf[Array[Tuple2[_, _]]]
for (t <- tuples) {
logInfo("1: "+t._1+" 2: "+t._2)
}
case _ =>
logInfo("result(0)(0): _")
}
}似乎打印出数组中的所有元组。谢谢!
https://stackoverflow.com/questions/23332120
复制相似问题