1
votes

Masquage du numéro de carte de crédit avec PySpark

Je suis nouveau dans Spark et je dois masquer les numéros de carte de crédit présents dans un Dataframe Spark où les quatre derniers chiffres ne sont affichés que. Comment faire cela?

Voici mon tableau

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

Résultat attendu:

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


0 commentaires

4 Réponses :


0
votes
Seq("123456789").toDF()
.select(concat(lit("********"),regexp_extract('value',".{4}$",0)).as("card"))
.show()

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

0 commentaires

0
votes

une autre alternative -

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


0 commentaires

0
votes

Dans pyspark, vous pouvez également utiliser la fonction de sous-chaîne

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


0 commentaires

0
votes

Vous pouvez utiliser sous-chaîne et lpad ensemble pour générer un comportement similaire,

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

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



0 commentaires