PySpark正则表达式模式匹配

时间:2020-01-22 10:54:55

标签: apache-spark pyspark apache-spark-sql

我想将以下正则表达式转换为pyspark。

例如:+ 420602642919-我们需要使用正则表达式过滤的这类电话号码

("/^((\+|00)(42)|0)?((060|660|664|676|68[0-1]|688)([0-9]){7}|(699)([0-9]){8})$/")

如何在Pyspark中实现这一目标?

1 个答案:

答案 0 :(得分:0)

您可以使用rlike列函数来应用正则表达式,如下所示:

import pyspark.sql.functions as F

#your initial dataframe
l = [('+420602642919',)
,('blabla',)]

df=spark.createDataFrame(l, ['someText'])

yourregex = '^((\+|00)(42)|0)?((060|660|664|676|68[0-1]|688)([0-9]){7}|(699)([0-9]){8})$'

#adding a column
df.withColumn('match', df.someText.rlike(yourregex)).show()

#or filtering
df.filter(df.someText.rlike(yourregex)).show()

输出:

+-------------+-----+
|     someText|match|
+-------------+-----+
|+420602642919| true|
|       blabla|false|
+-------------+-----+

+-------------+
|     someText|
+-------------+
|+420602642919|
+-------------+