PySpark:基于数据框中具有 UUID 的列添加新列
Posted
技术标签:
【中文标题】PySpark:基于数据框中具有 UUID 的列添加新列【英文标题】:PySpark: Add new column based on a column with UUID in a dataframe 【发布时间】:2019-02-13 09:25:30 【问题描述】::)
我正在处理一个我想公开展示的庞大数据集(数据框),我想匿名化数据,所以我不想让用户的UUID
像使用带有字符串的新列一样使用:
用户1,用户2,用户3,
明显对应另一栏的ID
。
当/否则时我无法使用它们,因为我在 df
中有超过一千个不同的 uuids
。
所以最终结果应该是这样的:
| UUID | User |
|uuid1 |user1 |
|uuid1 |user1 |
|uuid2 |user2 |
|uuid3 |user3 |
我尝试编写一个函数,每次uuid
更改时都会增加用户“名称”中的数字,但如果您有任何其他简单的想法,请告诉我! :)
【问题讨论】:
您可以只使用 UUID 创建一个单独的数据框,并使用monotonically_increasing_id()
添加一个新列,然后重新加入这个新列
请发布您的尝试实现以及初始数据框架构
【参考方案1】:
一个可能的解决方案是这样的:
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 排序后创建另一列,其中包含字符串“用户”和适当的行号。所以你有越来越多的用户名,例如用户1,用户2,用户3,...
输出:
+-----+-----+
| UUID| User|
+-----+-----+
|uuid3|User3|
|uuid1|User1|
|uuid1|User1|
|uuid2|User2|
+-----+-----+
【讨论】:
我以我将如何使用它的方式实现它,并尽快发布它,但是很好的解决方案!谢谢!! 所以我唯一需要改变的是从原始数据集 (df1) 中获取 ID,所以我有我们讨论的方式 (df2) 中的 uuid 列表。然后我制作了另一个数据框以将 uuid 与用户名 (df3) 连接起来,然后将其加入原始数据集:) finalDF = df3.join(df1,["student_institution_id"]) display(finalDF)以上是关于PySpark:基于数据框中具有 UUID 的列添加新列的主要内容,如果未能解决你的问题,请参考以下文章