value <不是AnyVal的成员

Avi*_*yam 2 scala shortest-path apache-spark

我一直在scala中编写代码来找到最短的路径.这是我找到Shortest-Path的代码.但是我在下面的代码中遇到错误

if ( (kv1._1 + kv1._2 )< (kv2._1 + kv2._2)) kv1 else kv2 
Run Code Online (Sandbox Code Playgroud)

错误是

value < is not a member of AnyVal
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

 val inputRDD = sc.textFile(args(0)).map { line =>
  val a = line.split(",")
  (a(0).toLong, (a(1).toLong, a(2).toLong))
}
var distanceRDD = inputRDD.flatMap(x => {
  val pair1 = if (x._1 == 0) (x._1, 0) else (x._1, Long.MaxValue)
  val pair2 = if (x._2._1 == 0) (x._2._1, 0) else (x._2._1, Long.MaxValue)

  List(pair1, pair2)
}).distinct()

for ( index <- 1 to 4 ) {
  val vertexDistanceRDD=  inputRDD.join(distanceRDD)   

  val invertedRDD =vertexDistanceRDD.map(attr => (attr._2._1._2,(attr._2._1._1,attr._2._2)))

  val computedDistBetweenVertRDD =invertedRDD.reduceByKey((kv1, kv2) => {

    if (kv1._2 == kv2._2) if (kv1._1 < kv2._1) kv1 else kv2
    else if (kv1._2.<(kv2._2)){
      if ( kv2._2 != Long.MaxValue) {
        if ( (kv1._1 + kv1._2 )< (kv2._1 + kv2._2)) kv1 else kv2
      }
      else  kv1
    }
    else {
      if ( kv1._2 != Long.MaxValue) {
        if (kv1._1 + kv1._2 < kv2._1 + kv2._2) kv1 else kv2
      }
      else  kv2
    }
  })

  val joinedRDD = computedDistBetweenVertRDD.join(distanceRDD)
  distanceRDD =joinedRDD.map(kv => {
    if (kv._2._2 > kv._2._1._1 + kv._2._1._2) (kv._1,kv._2._1._1 + kv._2._1._2) else (kv._1,kv._2._2)
  })
}
Run Code Online (Sandbox Code Playgroud)

可能的原因是什么,我该如何纠正?

Ole*_*cov 5

表达

if (x._1 == 0) (x._1, 0) else (x._1, Long.MaxValue)
Run Code Online (Sandbox Code Playgroud)

具有类型(Long, AnyVal)因为0Int文字(在这种情况下它不是隐式转换为Long)和最小上限IntLongAnyVal.应该是正确的代码

if (x._1 == 0) (x._1, 0L) else (x._1, Long.MaxValue)
//                     ^ use Long literal there
Run Code Online (Sandbox Code Playgroud)

同样适用于你的第二个 if