![](/img/trans.png)
[英]Add new column in Pyspark dataframe based on where condition on other column
[英]PySpark: Add new column based on a column with UUID in a dataframe
:)
我正在处理一个巨大的数据集(数据框),我想公开显示该数据集,我想对该数据进行匿名处理 ,所以我不想像用户使用新的UUID
那样使用带有字符串的新列:
用户1,用户2,用户3,
显然对应于另一列中的ID
。
我不能在其他情况下使用它们,因为df
有超过一千种不同的uuids
。
因此,最终结果应如下所示:
| UUID | User | |uuid1 |user1 | |uuid1 |user1 | |uuid2 |user2 | |uuid3 |user3 |
我尝试编写一个函数,以在每次更改uuid
时递增用户“名称”中的数字,但是,如果您还有其他简单的想法,请告诉我! :)
一个可能的解决方案是这样的:
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|
+-----+-----+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.