在 PySpark 中屏蔽电子邮件和电话号码

Kis*_*dav 0 python string bigdata apache-spark pyspark

我想屏蔽电子邮件 - “@”之前的第一个和最后一个字符保持未屏蔽,其余字符应屏蔽。

对于电话号码,第一位和最后一位数字保持未屏蔽,其余数字将被屏蔽。

在此输入图像描述

Zyg*_*ygD 5

使用regexp_replace

输入:

from pyspark.sql import functions as F
df = spark.createDataFrame(
    [(1, 'Aman', 27, 'aman_93@gmail.com', '9923150074'),
     (2, 'Prateek', 28, 'prateek_gulati@reddit.com', '8727451936'),
     (3, 'Rajat', 27, 'goyal.rajat@gmail.com', '9871288442')],
    ['Customer_Number', 'Customer_Name', 'Customer_Age', 'Email', 'Mobile']
)
Run Code Online (Sandbox Code Playgroud)

脚本:

df = df.withColumn('Email', F.regexp_replace('Email', '(?<!^).(?=.+@)', '*'))
df = df.withColumn('Mobile', F.regexp_replace('Mobile', '(?<!^).(?!$)', '*'))

df.show()
# +---------------+-------------+------------+--------------------+----------+
# |Customer_Number|Customer_Name|Customer_Age|               Email|    Mobile|
# +---------------+-------------+------------+--------------------+----------+
# |              1|         Aman|          27|   a*****3@gmail.com|9********4|
# |              2|      Prateek|          28|p************i@re...|8********6|
# |              3|        Rajat|          27|g*********t@gmail...|9********2|
# +---------------+-------------+------------+--------------------+----------+
Run Code Online (Sandbox Code Playgroud)

它是通过正则表达式lookarounds启用的。

对于电子邮件,*当满足 2 个条件时,将每个字符替换为:

  • (?<!^)意味着在此字符之前不能有字符串的开头
  • (?=.+@)表示在此字符之后必须至少有一个字符后跟@符号

*对于移动设备,当满足 2 个条件时,您可以将每个字符替换为:

  • (?<!^)- 与上面相同 - 意味着在此字符之前不能有字符串的开头
  • (?!$)意味着在此字符之后不能有字符串结尾