Python 在Spark中使用标点符号的未闭合字符类

Python 在Spark中使用标点符号的未闭合字符类,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我正在尝试构建一个正则表达式模式,它将从字符串中删除标点符号。我决定使用字符串库中的标点符号。但是,当我执行它时,Spark返回一个错误,即有一个未闭合字符 我怀疑标点符号中的字符在执行过程中会关闭引号。我有一种感觉,这应该是简单的修复,但我不知道如何。我的代码如下: from pyspark.sql.functions import regexp_replace, trim, col, lower import string def removePunctuation(column):

我正在尝试构建一个正则表达式模式,它将从字符串中删除标点符号。我决定使用
字符串库中的
标点符号。但是,当我执行它时,Spark返回一个错误,即有一个未闭合字符

我怀疑
标点符号
中的字符在执行过程中会关闭引号。我有一种感觉,这应该是简单的修复,但我不知道如何。我的代码如下:

from pyspark.sql.functions import regexp_replace, trim, col, lower
import string

def removePunctuation(column):

    no_punct = regexp_replace(column, string.punctuation, '')
    lowered = lower(no_punct)
    cleaned = strip(lowered)
    return cleaned
我得到这个错误
org.apache.spark.SparkException:作业由于阶段失败而中止:阶段86.0中的任务0失败了1次,最近的失败:阶段86.0中的任务0.0丢失(TID 3709,localhost):java.util.regex.PatternSyntaxException:索引31附近未关闭的字符类

regexp_replace(column, "\p{Punct}", "")
要使用
字符串.标点符号
,您必须对单个字符进行转义并将其放入字符集中,但这很容易出错,而且很难看:

import re

regexp_replace(column, "[{0}]".format(re.escape(string.punctuation)), "")

请注意,下划线被视为合法的字母数字字符,因此需要特别删除。

您可能只需要包含您想要的内容:数字、字母和空格

return lower(trim(regexp_replace(regexp_replace(column, '[^\w\s]', ''),'_','')))

真是太棒了。你在哪里找到的?
return lower(trim(regexp_replace(regexp_replace(column, '[^\w\s]', ''),'_','')))