首页 > 解决方案 > 有没有办法将默认案例值作为参数传递

问题描述

我正在尝试查看是否有一种方法可以将默认大小写的值合并到匹配表达式中

item match {
case null => false
case _:String => _.matches(params)
}

我试过寻找不同的选择,但我真的找不到解决方案。

对于上下文,这是这段代码的一部分,在spark dataframe

x.filter(row => row.getAs[String]("colname").matches("""/regex/""")).count()

但是有一些偶然的null价值观会让一切都崩溃。

我知道我可以这样做以获得所需的结果,但再次计算它没有意义

x.filter(row => row.getAs[String]("colname") match{
         case null => false
         case _ => row.getAs[String]("colname").matches("""\d""")
         }).count()

任何建议或指示都会有所帮助。谢谢

标签: scalaapache-spark

解决方案


要匹配所有内容,您只需要使用没有类型归属的变量名:

item match {
   case null => false
   case i => i.matches(params)
}

所以在你的情况下:

x.filter(row => 
   row.getAs[String]("colname") match {
         case null => false
         case r => r.matches("""\d""")
   }
).count()

如果要检查项目是否为空,还可以使用Option.applywhich 返回None值是否为空nullSome否则,例如:

Option(item).fold(false)(_.matches(params))

推荐阅读