【问题标题】:pyspark. Generate list based on values in multiple columns [duplicate]皮斯帕克。根据多列中的值生成列表[重复]
【发布时间】:2021-10-01 14:11:55
【问题描述】:

我是 pyspark 的新手,但我做了一些研究,似乎无法找到我的问题的答案。我有一个数据框,我可以在 streetID col 中有重复的条目。我需要根据 streetID 创建一个(排序的)houseNums 列表。

+---------+---------+
|streetID |houseNum |
+---------+---------+
|      890|    12445|
|      400|    35840|
|      890|    28980|
|      639|    35840|
|      639|    12445|
+---------+---------+

希望结果看起来像这样。我是否需要一个 UDF,或者是否有内置的 API 可以解决这个问题?有什么建议吗?


+---------+--------------------+
|streetID |houseNumList        |
+---------+--------------------+
|      400|    [35840]         |
|      890|    [12445, 28980]  |
|      639|    [12445, 35840]  |
+---------+--------------------+

【问题讨论】:

    标签: pyspark


    【解决方案1】:

    您可以使用collect_list,它返回一个包含重复对象的列表。:

    from pyspark.sql import functions as F
    
    (df.groupBy("streetID")\
       .agg(F.collect_set("houseNum").alias('houseNumList')).show()
    

    sort列表中的每个元素ascending顺序,你可以包含函数sort_array

    (df.groupBy("streetID")\
       .agg(F.sort_array(F.collect_set("houseNum").alias('houseNumList')).show()
    

    这将order您的号码在列表中按升序排列。

    【讨论】:

      猜你喜欢
      • 2021-07-07
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多