gpt4 book ai didi

python - 如何在 Pyspark 中找到数组列的多模式

转载 作者:行者123 更新时间:2023-12-03 17:10:33 25 4
gpt4 key购买 nike

我想在这个数据框中找到任务列的模式:

+-----+-----------------------------------------+
| id | task |
+-----+-----------------------------------------+
| 101 | [person1, person1, person3] |
| 102 | [person1, person2, person3] |
| 103 | null |
| 104 | [person1, person2] |
| 105 | [person1, person1, person2, person2] |
| 106 | null |
+-----+-----------------------------------------+
如果有多种模式,我想显示所有模式。
有人可以帮我得到这个输出:
+-----+-----------------------------------------+---------------------------+
| id | task | mode |
+-----+-----------------------------------------+---------------------------+
| 101 | [person1, person1, person3] |[person1] |
| 102 | [person1, person2, person3] |[person1, person2, person3]|
| 103 | null |[] |
| 104 | [person1, person2] |[person1, person2] |
| 105 | [person1, person1, person2, person2] |[person1, person2] |
| 106 | null |[] |
+-----+-----------------------------------------+---------------------------+
这是我在这里的第一个问题。非常感谢任何帮助或提示。谢谢你。

最佳答案

我看不出有理由使用 UDF 对于这种情况 spark2.4+ 因为我们可以使用 higher order functions 以获得所需的输出。与高阶函数相比,使用计数器的 UDF 对于大数据来说会非常慢:

from pyspark.sql import functions as F

df\
.withColumn("most_common", F.expr("""transform(array_distinct(values),\
x-> array(aggregate(values, 0,(acc,t)->acc+IF(t=x,1,0)),x))"""))\
.withColumn("most_common", F.expr("""transform(filter(most_common, x-> x[0]==array_max(most_common)[0]),y-> y[1])"""))\
.show(truncate=False)

#+---+----------------------------------------+---------------------------+
#|id |values |most_common |
#+---+----------------------------------------+---------------------------+
#|1 |[good, good, good, bad, bad, good, good]|[good] |
#|2 |[bad, badd, good, bad,, good, bad, good]|[bad, good] |
#|2 |[person1, person2, person3] |[person1, person2, person3]|
#|2 |null |null |
#+---+----------------------------------------+---------------------------+

关于python - 如何在 Pyspark 中找到数组列的多模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63930235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com