如何在Scala中避免/修复错误“ java.io.Serializable”

时间:2019-03-24 22:11:55

标签: scala apache-spark

通常如何解决下面的“ java.io.Serializable”错误?

我猜我函数中的数据类型是由它引起的(?)。如何避免这种情况或将结果改回正确的类型。

def allKeys(sampledf: DataFrame): DataFrame = {......}

val afd12= afd.schema.fieldNames.contains("ID") && afd.schema.fieldNames.contains("CONNECTIDS") match {
   case true => allKeys(afd) 
   case false => "no"
}

afd12.printSchema()

这是我得到的错误:

afd: java.io.Serializable = [ID: string, ADDITIONALINFO: string ... 87 more fields]
<console>:95: error: value printSchema is not a member of java.io.Serializable
   afd12.printSchema()
         ^

1 个答案:

答案 0 :(得分:2)

您必须确保模式匹配块

 match {
   case true => allKeys(afd) 
   case false => "no"
}

返回一致的类型。现在,一个分支返回Dataset[Row],而另一个返回String,因此最接近的公共类型是Serializable。最简单的解决方法是返回带有您选择的模式的empty DataFrame,而不是no

match {
  case true => allKeys(afd) 
  case _ => spark.emptyDataFrame
}