我正在尝试减少Scala中的一个组。 以下是我的代码:
val record = file.map(rec => (rec.state,rec.gender,rec.aadharGenerated.toInt)).groupByKey(_._1)
.reduceGroups((a,b)=>{
var total = a._3 + b._3
var mTotal = if(a._2.trim().equalsIgnoreCase("m")) {(a._3.toInt + b._3.toInt)}
(a._1,total.toString(),mTotal)
}).collect
在倒数第二行我得到编译时错误“类型不匹配;找到:AnyVal required:Int”
第三个参数应该是int。我添加的值已经是int。 我是Scala的新手,感谢任何帮助。 提前致谢
答案 0 :(得分:2)
您使用if
作为else
变量的mTotal
表达式。 if
的返回类型是 success 块和 else 块的最近公共超类型。
如果您没有提供else
阻止,Scala将假设:
else ()
()
是Unit
的值。因此,要使mTotal
成为Int
,您需要使用else
块提供后备值。
答案 1 :(得分:0)
我不知道你的数据,但是你的断言:
第三个参数应该是int。
不成立。如果a._2.trim().equalsIgnoreCase ("m")
评估为假,该怎么办?
scala> var mTotal = if ("a".equalsIgnoreCase("m")) {7}
mTotal: AnyVal = ()