【发布时间】:2021-05-30 00:23:04
【问题描述】:
我目前有一个大型数据集,但为简单起见,它看起来像这样:
Person, Friend, Friendship_Score, Days_Known
Alice, Bob, 120, 56
Alice, Candy, 20, 23
Bob, Daniel, 24, 77
Bob, Alice, 120, 56
Candy, Alice, 20, 23
Daniel, Bob, 24, 77
Daniel, Ed, 56, 65
Daniel, Fin, 52, 54
Daniel, Gin, 22, 50
...
我想在这个数据集上使用一个窗口函数让它看起来像这样:
Alice, Bob, 120, 56
Bob, Daniel, 24, 77
Bob, Alice, 120, 56
Candy, Alice, 20, 23
Daniel, Bob, 24, 77
Daniel, Ed, 56, 65
Daniel, Fin, 52, 54
过滤器背后的逻辑应该是,对于每个人,我们按照他们认识的时间长短排列他们的朋友(days_known 值越高在顶部),然后只保留足够多的朋友他们的friendship_score 为 100。
例如,Alice 只需要 Bob,因为她认识他的时间最长,并且他们的 friendship_score 超过 100。Bob 需要 Daniel 和 Alice,因为 Bob 认识 Daniel 的时间更长,但他们的 friendship_score 只有 24 . 但是,加了 Alice 之后,Bob 认识时间最长的下一个朋友,friendship_score 加起来在 100 以上。
我知道我们需要做某种窗口函数和滚动求和,但我在将这些想法放入代码时遇到了麻烦,想知道是否有人可以提供帮助。谢谢!
【问题讨论】:
标签: sql pyspark window-functions