删除标点符号在 pyspark 中不起作用

remove punctuation is not working in pyspark

我想制作我的 pyspark 代码,以便它可以从数据框列中删除标点符号。我的代码是这样的:

def split(x):
    punc = '!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~'
    x = x.replace(punc, ' ')
    return x

结果:

  id  |              
+--------
|187.080/B1

它应该删除所有标点符号,但我不确定我应该编辑什么才能让它起作用?

如果您遇到的问题是标点符号,请尝试使用下面提供的代码段更新 split()

确保将 import string 放在文件的顶部。

import string

def split(value):
    for i in range (len(string.punctuation)):
    value = value.replace(string.punctuation[i], '')
    return value

如果有帮助请告诉我。

首先,您需要将函数注册为 UDF 才能使用该方法。 虽然,替换语句不起作用,因为它试图匹配整个字符串 punc,它没有出现在您的值中。 您可以使用正则表达式或迭代 punc 字符串,替换每个字符(我认为第二种方法更快):

def split(value):
    punc = '!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~'
    for ch in punc:
        value = value.replace(ch, ' ')
    value = value.replace(' ','')
    return value

只是为了性能说明,总是尝试搜索是否在 pyspark 模块 (pyspark.sql.functions) 中实现了类似的功能,因为它们总是比 UDF 快得多。