【问题标题】:remove punctuation is not working in pyspark删除标点符号在 pyspark 中不起作用
【发布时间】:2020-09-02 17:34:23
【问题描述】:

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

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

结果:

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

它应该删除所有标点符号,但我不确定我应该编辑什么才能使其正常工作?

【问题讨论】:

  • 输入转换为输出的是什么?

标签: python pyspark punctuation


【解决方案1】:

首先,您需要将您的函数注册为 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 快得多。

【讨论】:

    【解决方案2】:

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

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

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

    如果这有帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多