pyspark 用 'x' 替换列中的小写字符

pyspark replace lowercase characters in column with 'x'

我正在尝试执行以下操作,但对于 pyspark 中的一个专栏,但没有成功。关于仅隔离 spark df 列中的小写字符有什么想法吗?

''.join('x' if x.islower() else 'X' if x.isupper() else x for x in text)

以下面的数据帧为例

+----------+
|     value|
+----------+
|lRQWg2IZtB|
|hVzsJhPVH0|
|YXzc4fZDwu|
|qRyOUhT5Hn|
|b85O0H41RE|
|vOxPLFPWPy|
|fE6o5iMJ6I|
|918JI00EC7|
|x3yEYOCwek|
|m1eWY8rZwO|
+----------+

您可以使用名为 regexpr_replacepyspark.sql 函数通过以下代码隔离列中的小写字母

from pyspark.sql import functions

df = (df.withColumn("value", 
         functions.regexp_replace("value", r'[A-Z]|[0-9]|[,.;@#?!&$]', "")))

df.show()
+-----+
|value|
+-----+
|  lgt|
| hzsh|
|zcfwu|
| qyhn|
|    b|
|  vxy|
|  foi|
|     |
|xywek|
| merw|
+-----+

您可以直接使用regex_replace将小写值替换为任何想要的值-

在您的情况下,您必须链接 regex_replace 以获得最终输出 -

数据准备


inp_string = """
lRQWg2IZtB
hVzsJhPVH0
YXzc4fZDwu
qRyOUhT5Hn
b85O0H41RE
vOxPLFPWPy
fE6o5iMJ6I
918JI00EC7
x3yEYOCwek
m1eWY8rZwO
""".strip().split()


df = pd.DataFrame({
        'value':inp_string
})

sparkDF = sql.createDataFrame(df)


sparkDF.show()

+----------+
|     value|
+----------+
|lRQWg2IZtB|
|hVzsJhPVH0|
|YXzc4fZDwu|
|qRyOUhT5Hn|
|b85O0H41RE|
|vOxPLFPWPy|
|fE6o5iMJ6I|
|918JI00EC7|
|x3yEYOCwek|
|m1eWY8rZwO|
+----------+

正则表达式替换

sparkDF = sparkDF.withColumn('value_modified',F.regexp_replace("value", r'[a-z]', "x"))

sparkDF = sparkDF.withColumn('value_modified',F.regexp_replace("value_modified", r'[A-Z]', "X"))

sparkDF.show()

+----------+--------------+
|     value|value_modified|
+----------+--------------+
|lRQWg2IZtB|    xXXXx2XXxX|
|hVzsJhPVH0|    xXxxXxXXX0|
|YXzc4fZDwu|    XXxx4xXXxx|
|qRyOUhT5Hn|    xXxXXxX5Xx|
|b85O0H41RE|    x85X0X41XX|
|vOxPLFPWPy|    xXxXXXXXXx|
|fE6o5iMJ6I|    xX6x5xXX6X|
|918JI00EC7|    918XX00XX7|
|x3yEYOCwek|    x3xXXXXxxx|
|m1eWY8rZwO|    x1xXX8xXxX|
+----------+--------------+