pyspark udf rlike条件在if error中

mrwjdhj3  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(455)

我使用的是spark2.1脚本是pyspark脚本
我的数据框如下
Dataframename:df

纳文
纳文123
现在我的输出应该是

纳文
我使用下面的自定义项

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

df.withColumn("FLG",fn("a")).show()

我得到的错误如下:全局名称'rlike'没有定义
请帮助我跨过这个障碍

uqzxnwby

uqzxnwby1#

你想要一个 filter 不是一个 withColumn 增加了一列。
如果要严格按字母顺序排列:

import pyspark.sql.functions as 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")).otherwise(df.a))

相关问题