У меня есть PySpark DataFrame, который выглядит следующим образом:
+------+-----------+
|src_ip| timestamp|
+------+-----------+
|A |2020-06-19 |
|B |2020-06-19 |
|B |2020-06-20 |
|C |2020-06-20 |
|D |2020-06-21 |
+------+-----------+
Я хотел бы получить счетчик каждого отдельного IP-адреса, который разбит на количество отдельных IP-адресов, видимых в день.
Я пробовал:
df.groupBy(window(df['timestamp'], "1 day")) \
.agg(countDistinct('src_ip')) \
.orderBy("window").show()
Однако это не дает мне правильного результата, поскольку он разбивает DF на время windows и получает отдельное количество для каждого из этих раз windows как показано:
+-----------+-----------------------+
| window | count(DISTINCT(src_ip)|
+-----------+-----------------------+
|2020-06-19 | 2 |
|2020-06-20 | 2 |
|2020-06-21 | 1 |
+-----------+-----------------------+
Это неверно, так как B уже появился на 2020-06-19 и должен быть классифицирован как отдельный.
Итоговая таблица, которую я хотел бы см. это:
+-----------+-----------------------+
| window | count(DISTINCT(src_ip)|
+-----------+-----------------------+
|2020-06-19 | 2 |
|2020-06-20 | 1 |
|2020-06-21 | 1 |
+-----------+-----------------------+
Возможно ли это даже с PySpark? Любая помощь приветствуется.