首页 > 解决方案 > 如何在 Scala 中避免/修复错误“java.io.Serializable”

问题描述

您通常如何修复下面的“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()
         ^

标签: scalaapache-spark

解决方案


您必须确保模式匹配块

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

返回一致的类型。现在一个分支返回Dataset[Row]另一个分支String,所以最接近的常见类型是Serializable. 最简单的解决方法是使用您选择的架构返回一个DataFrameno,而不是.

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

推荐阅读