Spark SQL中使用POSIX正则匹配非数值行的语法疑问
Spark SQL中使用POSIX类正则的正确写法
Spark SQL的rlike函数基于Java正则表达式引擎,不支持[:digit:]/[:alpha:]这类POSIX括号表达式语法,这也是你测试写法无效的原因。要实现对应功能,需要使用Java正则的Unicode属性类写法:
替代方案
1. 查找非数值行(替代[^0-9])
可以用[^\\p{Digit}],或者更简洁的\\D(匹配任意非数字字符):
// 写法1:使用Unicode属性类 spark.sql("select * from tabl where UPC rlike '[^\\p{Digit}]'").show() // 写法2:用\D简化 spark.sql("select * from tabl where UPC rlike '\\D'").show()
2. 匹配纯数字字符串(对应你的测试语句)
用^\\p{Digit}+$或者^\\d+$(\d是\p{Digit}的简写):
spark-sql> select * from ( select '8787687' col1) where rlike(col1,'^\\p{Digit}+$'); -- 或者 spark-sql> select * from ( select '8787687' col1) where rlike(col1,'^\\d+$');
常用等价映射
| POSIX类 | Java正则等价写法 | 说明 |
|---|---|---|
[:digit:] | \\p{Digit}/\\d | 匹配0-9的阿拉伯数字 |
[:alpha:] | \\p{Alpha} | 匹配任意字母(含大小写) |
[:alnum:] | \\p{Alnum} | 匹配字母和数字 |
内容的提问来源于stack exchange,提问作者Prabu
相关产品推荐
相关产品推荐

