我想看看是否有一种方法可以将默认大小写的值合并到匹配表达式中
item match {
case null => false
case _:String => _.matches(params)
}
我试过寻找不同的选择,但我真的找不到解决办法。
对于context,这是代码片段的一部分,在 spark dataframe
```
x.filter(row => row.getAsString.matches("""/regex/""")).count()
但也有例外 `null` 价值观让一切都破碎了。
我知道我可以这样做来得到想要的结果,但是再计算一次就没有意义了
x.filter(row => row.getAsString match{
case null => false
case _ => row.getAsString.matches("""\d""")
}).count()
任何建议或建议都会有帮助。谢谢您
4条答案
按热度按时间yvt65v4c1#
除了krzysztofł回答如下,您可以在匹配stament之前添加null检查,您可以执行以下操作:
或者类似的
5jvtdoz22#
你可以用rlike。例如:
sxissh063#
要匹配所有内容,只需使用不带类型归属的变量名:
所以在你的情况下:
如果要检查该项是否为null,还可以使用
Option.apply
它回来了None
如果值为null
以及Some
否则,例如:o7jaxewo4#
如果我正确理解了您的需求,那么您希望在单个迭代中进行过滤和聚合,我认为udaf是您必须要做的事情。基本上,我不认为这样做比在你的原始文章的最后提到的选项,即自定义项过滤掉,然后计数有什么性能优势。但是,我已经演示了如何在这里使用udaf。
对于spark<3.0,您必须扩展userdefinedaggregatefunction类,使其看起来像这样-
然后使用这个初始化并使用这个udaf-
p、 s:我没有运行这个并验证,如果有小错误请原谅