Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark Dataframe UDF-不支持任何类型的架构_Scala_Apache Spark_Spark Dataframe_User Defined Functions - Fatal编程技术网

Scala Spark Dataframe 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

我正在编写Spark Scala UDF,面临“java.lang.UnsupportedOperationException:不支持任何类型的模式”

这会引发错误“java.lang.UnsupportedOperationException:不支持任何类型的架构”

,因为在您的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 _ => ""
}
在您的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
。如果这些条件都不满足怎么办?