Pyspark正则表达式到数据帧



我有一个类似的代码:

from pyspark.sql.functions import udf
from pyspark.sql.types import BooleanType
def regex_filter(x):
regexs = ['.*123.*']
if x and x.strip():
for r in regexs:
if re.match(r, x, re.IGNORECASE):
return True
return False 

filter_udf = udf(regex_filter, BooleanType())
df_filtered = df.filter(filter_udf(df.fieldXX))

我想使用"regexs"var来验证"fieldXX"中是否有任何数字"123">

我不知道我做错了什么!有人能帮我吗?

Regexp不正确。

我认为应该是这样的:

regexs = '.*[123].*'

您可以使用SQL函数来实现此

df.createOrReplaceTempView("df_temp")
df_1 = spark.sql("select *, case when col1 like '%123%' then 'TRUE' else 'FALSE' end col2 from df_temp")

使用UDF的缺点是无法将数据帧保存回或在该数据帧中进一步进行任何操作。

最新更新