在scala中的数据集的reduceGroup函数中获取编译时间错误

时间:2018-04-10 14:20:31

标签: scala dataset

我正在尝试减少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的新手,感谢任何帮助。 提前致谢

2 个答案:

答案 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 = ()