繁体   English   中英

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)

以下面的 dataframe 为例

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

您可以使用名为 regexpr_replace 的pyspark.sql regexpr_replace来隔离列中的小写字母,代码如下

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以获得最终的 output -

数据准备


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|
+----------+--------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM