В одну сторону, используя самостоятельное соединение:
df.alias("l").join(df.alias("r"), col("l.dst") == col("r.src"), "left")\
.groupBy("l.src", "l.dst")\
.agg((count("r.src") + first("l.linkage_count")).alias("linkage_count"))\
.show()
Мы используем левое соединение на dst == src
и подсчитываем количество совпадений, добавляемых в столбец linkage_count
.
Дает:
+---------------+---------------+-------------+
| src| dst|linkage_count|
+---------------+---------------+-------------+
| abc.com| _spf.a22.biz| 0|
|_spf.google.com| _spf.mail.ru| 0|
| abc.com|_spf.google.com| 1|
+---------------+---------------+-------------+