可序列化类型的表达式不符合选项字符串scala类型

时间:2019-01-07 06:38:35

标签: scala apache-spark

我在这里遇到编译时错误:

def fun1(item: TextMapWritable, field:String, language: String): Option[String] = {
    fun2(item, field, language)
      .getOrElse(fun3(item, field))
  }

fun2和fun3返回一个Option [String],但是当我尝试在fun1中使用它们时,出现此错误:

  

可序列化类型的表达与选项字符串类型不符   斯卡拉

2 个答案:

答案 0 :(得分:2)

您应该使用orElse

def fun1(item: TextMapWritable, field:String, language: String): 
Option[String]= {
fun2(item, field, language)
  .OrElse(fun3(item, field))
}

因为getOrElse如果选项非空则返回选项的值,否则返回评估默认值的结果。 请参阅此getOrElse doc.

答案 1 :(得分:0)

这就是你想要的

def fun1(item: TextMapWritable, field:String, language: String): Option[String] =
  fun2(item, field, language) orElse fun3(item, field)

原始代码的问题是getOrElseString中取出了Option,但是结果是Option[String],因此您想将字符串保留在Option