通常如何解决下面的“ 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()
^
答案 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
}