如何使用 Faker() 生成假名称并将现有名称作为种子实例传递

问题描述 投票:0回答:1

我有一个包含客户名称的数据框,我需要将其用于测试数据目的,但需要混淆名称。该名称需要是确定性的:如果表中存在相同的名称,则应使用相同的“假”名称对其进行混淆。

例如:Susan H 都需要有相同的“假”名字

全名 假名
苏珊H 约翰·F
伊娃B 莎拉E
苏珊H 约翰·F

我为此目的发现了 Faker()。我如何调整以下内容,以便可以将现有名称作为“seed_instance”传递,以便生成的“假”名称对于数据框中该名称的所有实例都相同?

from faker import Faker
import pyspark.sql.functions as F

fullname_list = [[1,"Sarah Markwaithe"]
,[2,"John Bellamy"]
,[3,"Jordan Fingleberry"]
,[4,"Susan Merchant"]
,[5,"Bobby Franker"]
,[6,"Sally Smith-Holdern"]
,[7,"Finley Farringdon"]
,[8,"Sarah Markwaithe"]
,[9,"Simone Grath"]
,[10,"Frederick Balchum"]
]
df_schema = ["Id","FullName"]
# create example df
df = spark.createDataFrame(fullname_list, df_schema)

fake = Faker('en_GB')
fake_name = F.udf(fake.name)

df = df.withColumn("FakeFullName", fake_name())

df.display()

我知道我可以使用seed_instance,但不知道如何在上面的代码中实现它,以便我可以将“FullName”传递给udf(抱歉,Python新手和紧迫的交付期限)

fake.seed_instance("Susan H")
fake.name()
python faker
1个回答
0
投票

我想我已经知道该怎么做了。不知道这是否是正确的方法(最佳实践等)。请随意发表评论并让我知道任何其他(和更有效/Pythonic)方法:

from faker import Faker
import pyspark.sql.functions as F
from pyspark.sql.functions import col, udf
from pyspark.sql.types import StringType

fullname_list = [[1,"Sarah Markwaithe"]
,[2,"John Bellamy"]
,[3,"Jordan Fingleberry"]
,[4,"Susan Merchant"]
,[5,"Bobby Franker"]
,[6,"Sally Smith-Holdern"]
,[7,"Finley Farringdon"]
,[8,"Sarah Markwaithe"]
,[9,"Simone Grath"]
,[10,"Frederick Balchum"]
]
df_schema = ["Id","FullName"]
# create example df
df = spark.createDataFrame(fullname_list, df_schema)

fake = Faker('en_GB')

# create function that does what I need to do
def generate_fake_name(str):
    fake.seed_instance(str)
    return fake.name()

# Convert to UDF function
fake_name = udf(generate_fake_name, StringType())

# us UDF over dataframe
df = df.withColumn("FakeFullName", fake_name(col("FullName")))
df.show()

© www.soinside.com 2019 - 2024. All rights reserved.