scala - 我如何处理 Spark scala 中的模式匹配中的空值

标签 scala apache-spark

这是 Spark shell 代码

 scala> val colName = "time_period_id"


 scala> val df = spark.sql("""select time_period_id from prod.demo where time_period_id = 
 202101102 """)
 df: org.apache.spark.sql.DataFrame = [time_period_id: int]

 scala>  val result = df.agg(max(colName)).head(1)
 result: Array[org.apache.spark.sql.Row] = Array([null])


 scala>     result(0).getInt(0) match {
 |       case null => 0
 |       case _ => result(0).getInt(0)
 |     }

如果结果是Array([null]),那么我希望返回0,如果结果是Array([20210110]) code> 然后我想要返回 20210110

但我收到此错误

 <console>:33: error: type mismatch;
 found   : Null(null)
 required: Int
         case null => 0

最佳答案

您可以使用 lift 获取数组项,以便将其作为选项进行处理。如果元素内部为 null,则返回 Some(null);如果根本没有元素,则返回 None

result.lift(0) match {
 case Some(element) if element != null => element.getInt(0)
 case _ => 0
}

或者,如果您不介意在模式匹配中包含更多行:

  result.lift(0) match {
     case Some(null) => 0
     case Some(element) => element.getInt(0)
     case _ => 0
    }

另一种选择是使用尝试

import scala.util.Try
import scala.util.Success

Try(result(0).getInt(0)) match {
  case Success(date) => date
  case _ => 0
} 

关于scala - 我如何处理 Spark scala 中的模式匹配中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66571770/

相关文章:

scala - 使用TestNG(和Gradle)进行覆盖

scala - Scala 中等效的 JavaScript 括号表示法?

scala - 为 Scala 枚举导出 Cats 顺序

python - 了解 Spark 执行中的 DAG

scala - Spark scala 中数据帧行内容的条件

scala - Future Recursion Patterns/Future Chaining 任意长度

scala - 创建状态转换以将集合元素添加到 Map[K, Set[V]] 的更好方法

java - Spark : not understood behaviour when writing to parquet file - datatypes

java - Apache Spark : union operation is not performed

windows - 使用 PySpark 内核时出现 Jupyter Notebook 错误 : the code failed because of a fatal error: Error sending http request