问题描述
我想制作我的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快得多。