首页 > 解决方案 > Spark SQL - 仅匹配数字的正则表达式

问题描述

我试图确保数据框中的特定列不包含任何非法值(非数字数据)。为此,我尝试使用正则表达式匹配rlike来收集数据中的非法值:

在此处输入图像描述

我需要使用字符串字符或空格或逗号或任何其他不同于数字的字符来收集值。我试过了:

spark.sql("select * from tabl where UPC not rlike '[0-9]*'").show()

但这不起作用。它产生0行。

任何帮助表示赞赏。谢谢你。

标签: regexdataframeapache-sparkpysparkapache-spark-sql

解决方案


rlike正在寻找字符串中的任何匹配项。星号 (*) 表示 0 或多个。字符串中某处的零数字适用于每个可能的字符串。您需要指定要从字符串的开头^到结尾进行匹配$

spark.sql("select * from tabl where UPC not rlike '^[0-9]*$'").show()

或者,您也可以匹配字符串中的任何单个非数字字符[^0-9]

spark.sql("select * from tabl where UPC rlike '[^0-9]'").show()

推荐阅读