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

时间:2019-02-13 09:25:30

标签: python dataframe pyspark uuid databricks

:)

我正在处理一个庞大的数据集(数据框),我想公开显示该数据集,因此我想匿名化数据,所以不要让用户的UUID,我想像新列一样使用

  

user1,user2,user3

显然对应于另一列中的ID

我不能在其他情况下使用它们,因为uuids中有超过一千种不同的df

因此最终结果应如下所示:

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

我尝试编写一个函数,每次更改uuid时,都会增加用户“名称”中的数字,但是,如果您还有其他简单的想法,请告诉我! :)

1 个答案:

答案 0 :(得分:0)

可能的解决方法是:

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”和适当的行号。因此,您的用户名越来越多,例如user1,user2,user3,...

输出:

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