8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

按照条件收集窗口函数内的列表,pyspark

Torben Klein 2月前

144 0

我想收集一个列表,其中包含每个 id1 中具有相同或更低级别的 id2 的所有值。为了实现这一点,我使用窗口函数和 collect_list 函数。但是,我没有得到...

我想收集组内具有相同或较低级别每个 id1 的所有 id2 值的列表。

为了实现这一点,我使用了窗口函数和 collect_list 函数。但是,我在这里没有得到条件部分。如何解决?


df = spark.createDataFrame([
    ("A", 0, "M1", "D1"),
    ("A", 1, "D1", "D2"),
    ("A", 2, "D2", "D3"),
    ("A", 3, "D3", "D4"),
    ("B", 0, "M2", "D5"),
    ("B", 1, "D4", "D6"),
    ("B", 2, "D5", "D7")
], ["group_id", "level", "id1", "id2"])



window = Window.partitionBy('group_id').orderBy('level').rowsBetween(
    Window.unboundedPreceding, Window.unboundedFollowing
)

df_with_list = df.withColumn(
    "list_lower_level",
    F.collect_list("id2").over(window)
)

df_with_list.show()

输出如下:

+--------+-----+---+---+----------------+
|group_id|level|id1|id2|list_lower_level|
+--------+-----+---+---+----------------+
|       A|    0| M1| D1|[D1, D2, D3, D4]|
|       A|    1| D1| D2|[D1, D2, D3, D4]|
|       A|    2| D2| D3|[D1, D2, D3, D4]|
|       A|    3| D3| D4|[D1, D2, D3, D4]|
|       B|    0| M2| D5|    [D5, D6, D7]|
|       B|    1| D4| D6|    [D5, D6, D7]|
|       B|    2| D5| D7|    [D5, D6, D7]|
+--------+-----+---+---+----------------+

然而,我想实现这个目标:

+--------+-----+---+---+----------------+
|group_id|level|id1|id2|list_lower_level|
+--------+-----+---+---+----------------+
|       A|    0| M1| D1|[D1, D2, D3, D4]|
|       A|    1| D1| D2|[D2, D3, D4]|
|       A|    2| D2| D3|[D3, D4]|
|       A|    3| D3| D4|[D4]|
|       B|    0| M2| D5|    [D5, D6, D7]|
|       B|    1| D4| D6|    [D6, D7]|
|       B|    2| D5| D7|    [D7]|
+--------+-----+---+---+----------------+
帖子版权声明 1、本帖标题:按照条件收集窗口函数内的列表,pyspark
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Torben Klein在本站《python》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我需要在 html 文件中添加其他内容吗?您还可以显示代码是否适用于计算机而非设备?

返回
作者最近主题: