gpt4 book ai didi

scala - 如何对具有空值的行进行模式匹配?

转载 作者:行者123 更新时间:2023-12-03 07:07:37 28 4
gpt4 key购买 nike

我想知道为什么我无法在包含空值(字符串)的 Spark (2.1) 行上进行模式匹配:

val r = Row(null:String)

r match {case Row(s:String) => println("row is null")}

scala.MatchError: [null] (of class org.apache.spark.sql.catalyst.expressions.GenericRow)

最佳答案

Row在这里并没有真正发挥重要作用,我们可以简化:

val r = null: String

r match {case s:String => println("s is null")}

您可以检查模式匹配仍然失败。这是因为像 s: String 这样的类型模式是 specifically defined not to match null :

A type pattern T is of one of the following forms:

  • A reference to a class C, p.C, or T#C. This type pattern matches any non-null instance of the given class...

isInstanceOf 的行为也类似于:null.isInstanceOf[String]false

所以如果你想匹配null,你可以

  1. 完全使用 null 作为模式:

    r 匹配 {case s: String => println("r 不为空")case null => println("r 为空")}

  2. 使用“包罗万象”的模式,例如 _ 或变量:

    r 匹配 {case s: String => println("r 不为空")case s => println("仅当 r 为 null 或不是字符串时才匹配")}

或者如果我们把Row放回去,你会写

r match {
case Row(s: String) => println("r contains non-null")
case Row(null) => println("r contains null")
}

关于scala - 如何对具有空值的行进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46947573/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com