Pyspark DataFrame подсчитывает вхождения значения столбца в другой столбец - PullRequest
1 голос
/ 11 февраля 2020

Я получил Dataframe, который состоит из:

+--------------------+--------------------+-------------+
|                 src|                 dst|linkage_count|
+--------------------+--------------------+-------------+
|             abc.com|        _spf.a22.biz|            0|
|             abc.com|     _spf.google.com|            0|
|     _spf.google.com|        _spf.mail.ru|            0|
+--------------------+--------------------+-------------+

Теперь я хотел бы провести l oop через каждую строку, взять значение столбца 'dst' и найти количество вхождений этого Значение dst в столбце sr c и добавьте его в столбец linkage_count. Так что в этом случае результат должен быть:

+--------------------+--------------------+-------------+
|                 src|                 dst|linkage_count|
+--------------------+--------------------+-------------+
|             abc.com|        _spf.a22.biz|            0|
|             abc.com|     _spf.google.com|            1|
|     _spf.google.com|        _spf.mail.ru|            0|
+--------------------+--------------------+-------------+

1 Ответ

0 голосов
/ 12 февраля 2020

В одну сторону, используя самостоятельное соединение:

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|
+---------------+---------------+-------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...