Pyspark正则表达式到数据帧

Pyspark正则表达式到数据帧,pyspark,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):

我有一个类似的代码:

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的缺点是您无法将数据帧保存回去或在该数据帧中进一步执行任何操作。

除非我们有一些示例输入和输出,否则我们无法判断您做错了什么。你有错误吗?答案错了吗?阅读并尝试提供一个。使用UDF的缺点是您无法将数据帧保存回原处,或者无法在该数据帧中进一步执行任何操作。?您想澄清一下这句话吗?使用UDF后,您将在数据帧df_1中获取结果,您无法将其保存回HDFS,或者您无法使用df_1进行进一步的操作,这将导致错误,这绝对是不正确的。请给我一些文档来支持这个声明。我在使用UDF时体验到了这一点,你可以自己试试