删除标点符号在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以使用该方式。 虽然,replace语句不起作用,因为它试图匹配整个字符串punc,该字符串不会出现在您的值中。 您可以使用正则表达式或遍历punc字符串,以替换每个字符(我认为第二种方法更快):

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

仅出于性能注意事项,请始终尝试搜索pyspark模块(pyspark.sql.functions)中是否实现了类似的功能,因为它们始终比UDF快得多。