使用 PySpark 屏蔽信用卡号

Posted

技术标签:

【中文标题】使用 PySpark 屏蔽信用卡号【英文标题】:Masking credit card number using PySpark 【发布时间】:2020-06-30 14:02:42 【问题描述】:

我是 Spark 的新手,我需要屏蔽 Spark 数据框中的信用卡号,其中仅显示最后四位数字。该怎么做?

下面是我的桌子

    +----------+------------+
    |first_name|        card|
    +----------+------------+
    |       abc|999999999999|
    |       lmn|222222222222|
    +----------+------------+

预期输出:

    +----------+------------+
    |first_name|        card|
    +----------+------------+
    |       abc|********9999|
    |       lmn|********2222|
    +----------+------------+

【问题讨论】:

【参考方案1】:

在 pyspark 中也可以使用 substring 函数

from pyspark.sql.types import *
tst= sqlContext.createDataFrame([("name1",9999999999),("name2",2222222222)],schema=['name','number'])
# This is assuming your card number is not a string. If not skip this cast
tst_cast = tst.withColumn("number_string",F.col('number').cast(StringType()))
tst_mask = tst_cast.withColumn("masked_number",F.concat(F.lit('******'),F.substring(F.col("number_string"),6,4)))

【讨论】:

【参考方案2】:
Seq("123456789").toDF()
.select(concat(lit("********"),regexp_extract('value',".4$",0)).as("card"))
.show()

+------------+
|        card|
+------------+
|********6789|
+------------+

【讨论】:

【参考方案3】:

您可以同时使用 substring 和 lpad 来生成类似的行为,

df.selectExpr("lpad(substring(card,length(card)-4,4),16,'*') as card").show()

+----------------+
|            card|
+----------------+
|************9999|
+----------------+


【讨论】:

【参考方案4】:

另一种选择-

  df.withColumn("masked_cc", expr("concat(translate(left(card, length(card)-4), '0123456789', '**********')," +
      "right(card, 4))"))
      .show(false)

    /**
      * +----------+------------+------------+
      * |first_name|card        |masked_cc   |
      * +----------+------------+------------+
      * |abc       |999999999999|********9999|
      * |lmn       |222222222222|********2222|
      * +----------+------------+------------+

【讨论】:

以上是关于使用 PySpark 屏蔽信用卡号的主要内容,如果未能解决你的问题,请参考以下文章

C# Windows 应用程序(不是 wpf)将文本框中的信用卡号屏蔽为输入,然后验证和处理信用卡号

如何在.net中屏蔽信用卡号的前6位和后4位

如何屏蔽信用卡号的前两个字母和后四个字母[关闭]

有没有更好的方法在 python 中屏蔽信用卡号?

php PHP函数用连字符格式化信用卡号并应用屏蔽

Javascript REGEX 在字符串和掩码中查找信用卡号