【问题标题】:Create a unique group id over a window in Spark Dataframe在 Spark Dataframe 中的窗口上创建唯一的组 ID
【发布时间】:2019-12-13 16:48:32
【问题描述】:

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

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

我想为数据集中的每个 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】:

    使用 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
    

    【讨论】:

    • 或使用 DataFrame API:df.withColumn("groupguid",first(callUDF("UUID")).over(Window.partitionBy($"zip")))
    【解决方案2】:

    现在可以了,但是当我运行时

    var df = raw.selectExpr(
      "*",
      "first(uuid()) over (partition by zip) as groupguid",
      "first(uuid()) over (partition by name) as groupname"
      )
    )
    

    然后

    display(df) 
    

    给我一​​个与我运行时不同的 groupguid 和 groupname

    display(df.select("groupguid") 
    display(df.select("groupname") 
    

    如何确保 groupguid 和 groupname 不会改变?

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 2017-12-13
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      相关资源
      最近更新 更多