apache-spark - 如何在另一个 DF 的列中获取 DF 的一列中的值的计数?
问题描述
假设我有一个这样的结果 DF:
consequents
___________
['a']
['b']
['c']
和另一个像这样的项目DF
items
_____
['a', 'b']
['a']
['b', 'c']
我想获得consequents
所有items
数组中的总频率,例如:
consequents | freq
___________ _______
['a'] 2
['b'] 2
['c'] 1
我该怎么办?
我设法将项目 DF 变成单行,例如
items
_____
[['a', 'b'], ['a'], ['b', 'c']]
但我不确定从这里去哪里。
解决方案
您可以使用arrays_overlap
条件连接两个数据框,然后进行分组并计数:
import pyspark.sql.functions as F
result = (items.join(consequents, F.arrays_overlap('items', 'consequents'))
.groupBy('consequents')
.count()
)
result.show()
+-----------+-----+
|consequents|count|
+-----------+-----+
| [c]| 1|
| [b]| 2|
| [a]| 2|
+-----------+-----+
对于较旧的 Spark 版本 (< 2.4),您可以改用array_contains
条件:
import pyspark.sql.functions as F
result = (items.join(consequents, F.expr("array_contains(items, consequents[0])"))
.groupBy('consequents')
.count()
)
推荐阅读
- javascript - 如何将存储在javascript变量中的字符串直接转换为对象属性?
- cryptography - HMAC的结果
不同于其他实现 - php - 使用 PHP 使用 .pfx 证书签署 XML 文件
- javascript - REACT: If Else 逻辑,大于 100
- java - 在 Java 代码中执行以下操作的等效 openssl 命令是什么
- sql - 如何连接来自两个不同表的数据?
- node.js - Firestore 承诺
- scala - 如何在scala中添加内部映射的元组值
- javascript - 从列行中选择随机单元格
- python - Python C API call to error() binds to libc implementation instead of a local one