Scala Spark Dataframe UDF-不支持任何类型的架构
我正在编写Spark Scala UDF,面临“java.lang.UnsupportedOperationException:不支持任何类型的模式” 这会引发错误“java.lang.UnsupportedOperationException:不支持任何类型的架构”,因为在您的udf中未使用的模式应返回:Scala Spark Dataframe UDF-不支持任何类型的架构,scala,apache-spark,spark-dataframe,user-defined-functions,Scala,Apache Spark,Spark Dataframe,User Defined Functions,我正在编写Spark Scala UDF,面临“java.lang.UnsupportedOperationException:不支持任何类型的模式” 这会引发错误“java.lang.UnsupportedOperationException:不支持任何类型的架构”,因为在您的udf中未使用的模式应返回: 基本体(整型、字符串、布尔型等) 其他受支持类型的元组 其他受支持类型的列表、数组、映射 其他受支持类型的案例类 因此,如果向代码中添加其他内容,编译将成功 val aBP = ud
- 基本体(整型、字符串、布尔型等)
- 其他受支持类型的元组
- 其他受支持类型的列表、数组、映射
- 其他受支持类型的案例类
val aBP = udf((bG: String, pS: String, bP: String, iOne: String, iTwo: String) => {
if (bG != "I") {"NA"}
else if (pS == "D") {
if (iTwo != null)
iOne
else "NA"
} else if (pS == "U") {
if (bP != null)
bP
else
"NA"
} else {
""
}
})
您还可以使用模式匹配重新分发代码:
val aBP = udf [String, String, String, String, String, String] {
case (bG: String, _, _, _, _) if bG != "I" => "NA"
case (_, pS: String, _, iOne: String, iTwo: String) if pS == "D" && iTwo.isEmpty => iOne
case (_, pS: String, _, _, _) if pS == "D" => "NA"
case (_, pS: String, bP: String, _, _) if pS == "U" && bP.isEmpty => bP
case (_, pS: String, _, _, _) if pS == "U" => "NA"
case _ => ""
}
在您的udf中弃用的内容应返回:
- 基本体(整型、字符串、布尔型等)
- 其他受支持类型的元组
- 其他受支持类型的列表、数组、映射
- 其他受支持类型的案例类
val aBP = udf((bG: String, pS: String, bP: String, iOne: String, iTwo: String) => {
if (bG != "I") {"NA"}
else if (pS == "D") {
if (iTwo != null)
iOne
else "NA"
} else if (pS == "U") {
if (bP != null)
bP
else
"NA"
} else {
""
}
})
您还可以使用模式匹配重新分发代码:
val aBP = udf [String, String, String, String, String, String] {
case (bG: String, _, _, _, _) if bG != "I" => "NA"
case (_, pS: String, _, iOne: String, iTwo: String) if pS == "D" && iTwo.isEmpty => iOne
case (_, pS: String, _, _, _) if pS == "D" => "NA"
case (_, pS: String, bP: String, _, _) if pS == "U" && bP.isEmpty => bP
case (_, pS: String, _, _, _) if pS == "U" => "NA"
case _ => ""
}
您还需要一个
else
。如果这些条件都不满足怎么办?您还需要一个else
。如果这些条件都不满足怎么办?