作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在这个数据框中找到任务列的模式:
+-----+-----------------------------------------+
| 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/
我是一名优秀的程序员,十分优秀!