gpt4 book ai didi

scala - value < 不是 AnyVal 的成员

转载 作者:行者123 更新时间:2023-12-05 01:34:07 25 4
gpt4 key购买 nike

我一直在用scala编写代码来查找最短路径。这是我寻找最短路径的代码。但我在以下代码部分遇到错误

if ( (kv1._1 + kv1._2 )< (kv2._1 + kv2._2)) kv1 else kv2 

错误是

value < is not a member of AnyVal

这是我的代码:

 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)
})
}

可能的原因是什么以及如何纠正?

最佳答案

表达式

if (x._1 == 0) (x._1, 0) else (x._1, Long.MaxValue)

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

if (x._1 == 0) (x._1, 0L) else (x._1, Long.MaxValue)
// ^ use Long literal there

同样适用于你的第二个if

关于scala - value < 不是 AnyVal 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47212617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com