在Spark Dataframe中的窗口上创建唯一的组ID

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

我有一个数据框,我想在其中为数据集中的组添加唯一的ID

 id |   zip   | name
 1  |  30000  | abc
 2  |  30000  | abc
 3  |  40000  | kal
 4  |  50000  | res
 5  |  50000  | res
 6  |  60000  | dei
 7  |  60000  | dei

而且我想为数据集中的每个zip生成一个通用的UUID,以便它看起来像喜欢

 id |   zip   | name |  groupguid
 1  |  30000  | abc  |  FA4E4089-C3ED-41C4-B88C-000C6673A692
 2  |  30000  | abc  |  FA4E4089-C3ED-41C4-B88C-000C6673A692
 3  |  40000  | kal  |  860BDE48-9B4A-450E-BD68-001B90E8F977
 4  |  50000  | res  |  EAE3AFB7-412D-437E-8A15-001BE52373A3
 5  |  50000  | res  |  EAE3AFB7-412D-437E-8A15-001BE52373A3
 6  |  60000  | dei  |  AA8F1518-7F35-4E76-A550-002CF9C455AB
 7  |  60000  | dei  |  AA8F1518-7F35-4E76-A550-002CF9C455AB

有人知道如何实现吗?

scala dataframe apache-spark uniqueidentifier
1个回答
2
投票

使用Spark SQL的一种方法:

df.createOrReplaceTempView("df_table")

spark.sql("""  
    SELECT * 
    ,      first(uuid()) over (partition by zip) as groupguid 
    FROM df_table 
""").show

或仅使用selectExpr:

df.selectExpr(
    "*"
  , "first(uuid()) over (partition by zip) as groupguid"
).show
© www.soinside.com 2019 - 2024. All rights reserved.