我有以下DataFrame df
:
val df = Seq(
(1, 0, 1, 0, 0), (1, 4, 1, 0, 4), (2, 2, 1, 2, 2),
(4, 3, 1, 4, 4), (4, 5, 1, 4, 4)
).toDF("from", "to", "attr", "type_from", "type_to")
+-----+-----+----+---------------+---------------+
|from |to |attr|type_from |type_to |
+-----+-----+----+---------------+---------------+
| 1| 0| 1| 0| 0|
| 1| 4| 1| 0| 4|
| 2| 2| 1| 2| 2|
| 4| 3| 1| 4| 4|
| 4| 5| 1| 4| 4|
+-----+-----+----+---------------+---------------+
仅当from
节点的类型与to
节点的类型相同(即{{1}的值)时,我才想计算每个节点的输入和输出链接的数量}和type_from
)。
应排除type_to
和to
相等的情况。
这是我根据user8371915提出的this answer计算外发链接数量的方法。
from
当然,我可以为传入链接重复相同的计算,然后加入结果。但有没有更短的解决方案?
df
.where($"type_from" === $"type_to" && $"from" =!= $"to")
.groupBy($"from" as "nodeId", $"type_from" as "type")
.agg(count("*") as "numLinks")
.na.fill(0)
.show()