我有以下功能
def weight(Actors:RDD[(String,Int)],name:String,count:Int):Float={
val count1=Actors.lookup(name)
val i_count=if (!count1.isEmpty) count1(0) else 0
val edge=if (i_count!=0) (count.toFloat/i_count.toFloat) else 0.0
}我得到以下错误
<console>:229: error: type mismatch;
found : Unit
required: Float
}它是由0除法错误引起的吗?如何解决这个问题?
发布于 2017-06-05 05:22:05
weight函数不会返回任何内容,但是Float被定义为返回类型。
替换最后一行
val edge=if (i_count!=0) (count.toFloat/i_count.toFloat) else 0.0通过
if (i_count!=0) (count.toFloat/i_count.toFloat) else 0F应该解决你的问题
发布于 2017-06-05 05:30:07
此错误意味着您的是return Unit for weight方法,但是def weight(Actors:RDD[(String,Int)],name:String,count:Int):Float需要该方法的return Float值,因此此编译错误是抛出的。
解决方案:
@Ramesh Maharjan提供了解决这一问题的方法。但是,您也可以在Scala中尝试模式匹配,例如:
i_count match {
case 0 => 0.0F
case _=> count.toFloat/i_count.toFloat
}发布于 2017-06-05 05:31:26
不,这和零除法无关。将val定义为函数中的最后一行将被视为返回类型Unit。将其更改为以下内容将满足您为函数声明的Float返回类型:
if (i_count != 0) (count.toFloat / i_count.toFloat) else 0.toFloathttps://stackoverflow.com/questions/44362062
复制相似问题