PySpark:用空格循环替换标点符号

时间:2018-05-17 21:01:12

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

我在PySpark中成功运行了以下代码:

def pd(data):

    df = data
    df = df.select('oproblem')

    text_col = ['oproblem']

    for i in text_col: 

        df = df.withColumn(i, F.lower(F.col(i)))
        df = df.withColumn(i, F.regexp_replace(F.col(i), '[.,#-:;/?!\']', ' '))

    return df

但是当我添加第二列并尝试循环它时,它不起作用:

def pd(data):

    df = data
    df = df.select('oproblem', 'lca')

    text_col = ['oproblem', 'lca']

    for i in text_col: 

        df = df.withColumn(i, F.lower(F.col(i)))
        df = df.withColumn(i, F.regexp_replace(F.col(i), '[.,#-:;/?!\']', ' '))

    return df

以下是我得到的错误: TypeError:'Column'对象不可调用

1 个答案:

答案 0 :(得分:0)

我认为它应该是df = df.select(['oproblem', 'lca'])而不是df = df.select('oproblem', 'lca')

更好的是出于代码质量目的,让select语句使用text_columns变量,因此如果您需要使用更多列或列进行更改,则只需更改1行代码名字改变了。例如,

def pd(data):
    df = data
    text_col = ['oproblem', 'lca']
    df = df.select(text_col)
    ....