Python if错误中的pyspark udf rlike条件

Python if错误中的pyspark udf rlike条件,python,hadoop,apache-spark,pyspark,Python,Hadoop,Apache Spark,Pyspark,我使用的spark 2.1脚本是pyspark脚本 下面给出了我的数据帧 数据帧名称:df a 纳文 纳文123 现在我的输出应该是 a 纳文 我使用下面的自定义项 def fn(a): if((a==rlike("[0-9]"))|(a==' ')): return s df.withColumn("FLG",fn("a")).show() 我得到的错误如下:未定义全局名称“rlike” 请帮助我跨越这一障碍您想要的是一个过滤器而不是一个带有列的过滤器,它可以添加

我使用的spark 2.1脚本是pyspark脚本

下面给出了我的数据帧

数据帧名称:df

a

纳文

纳文123

现在我的输出应该是

a

纳文

我使用下面的自定义项

def fn(a):
    if((a==rlike("[0-9]"))|(a==' ')):
        return s

df.withColumn("FLG",fn("a")).show()
我得到的错误如下:未定义全局名称“rlike”


请帮助我跨越这一障碍

您想要的是一个
过滤器
而不是一个带有列的
过滤器
,它可以添加一个额外的列

如果要严格按字母顺序排列:

import pyspark.sql.函数作为psf
df=df.withColumn(“isCharString”,df.a.rlike(“^[a-zA-Z]+$”)
如果要保留没有数字的字符串

df=df.withColumn(“isCharString”,~df.a.rlike(“[0-9]”)
使用函数时出现的错误是因为将
rlike
用作独立函数,而不是pyspark类列的属性。要在spark中重写函数,请执行以下操作:

df=df.withColumn(“isCharString”,psf.when(
df.a.rlike(“[0-9]”)(df.a==”),
psf.lit(“s”)。否则(df.a))

谢谢Marie,我已经实现了我需要的函数形式的这个结果。您没有正确使用
rlike
函数中没有定义
s
是字符串值Marie,我很抱歉,它是,因此如果字符串不正确(包含数字或是单个空格),您将返回一个常量字符串值
“s”
。我已经编辑了我的答案