PySpark:根据数据框中具有 UUID 的列添加新列

PySpark: Add new column based on a column with UUID in a dataframe

:)

我正在处理一个我想公开展示的巨大数据集(数据框),为此我想匿名化数据,而不是让用户UUID,我想像使用新列一样使用字符串:

user1, user2, user3,

明显对应另一栏的ID

我无法使用它们 when/otherwise,因为我在 df.

中有超过一千种不同的 uuids

所以最终结果应该是这样的:

| UUID | User | |uuid1 |user1 | |uuid1 |user1 | |uuid2 |user2 | |uuid3 |user3 |

我尝试编写一个函数,在每次 uuid 更改时增加用户 "name" 中的数字,但是如果您有任何其他简单的想法,请告诉我! :)

一个可能的解决方案是:

from pyspark.sql.functions import *
df1 = spark.createDataFrame([("uuid1",),("uuid1",),("uuid2",),("uuid3",)], ["UUID"])
df2 = df1.distinct().withColumn("User",concat(lit("User"),\
row_number().over(Window.orderBy("UUID"))))


df1.join(df2,["UUID"]).show()

它获取您的数据框并创建一个包含所有用户的独特列表。然后在列表按 UUID 排序后创建另一列,其中包含字符串 "User" 和适当的行号。所以你有越来越多的用户名,例如用户 1、用户 2、用户 3、...

输出:

+-----+-----+
| UUID| User|
+-----+-----+
|uuid3|User3|
|uuid1|User1|
|uuid1|User1|
|uuid2|User2|
+-----+-----+