【问题标题】:PySpark Distinct Count of ColumnPySpark 不同的列数
【发布时间】:2020-08-04 12:06:35
【问题描述】:

我有一个如下所示的 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 拆分为时间窗口,并为每个时间窗口获取不同的计数,如下所示:

+-----------+-----------------------+
|  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 实现吗?非常感谢任何帮助。

【问题讨论】:

  • 你对distinct的定义是什么?

标签: python dataframe apache-spark pyspark window


【解决方案1】:

这是你想要的吗?或者请添加更多解释。

df.show(10, False)

+------+----------+
|src_ip|timestamp |
+------+----------+
|A     |2020-06-19|
|B     |2020-06-19|
|B     |2020-06-20|
|C     |2020-06-20|
|D     |2020-06-21|
+------+----------+


from pyspark.sql.functions import min, window, count

df.groupBy('src_ip').agg(min('timestamp').alias('timestamp')) \
  .groupBy('timestamp').agg(count('src_ip').alias('count')) \
  .orderBy('timestamp').show(10, False)

+----------+-----+
|timestamp |count|
+----------+-----+
|2020-06-19|2    |
|2020-06-20|1    |
|2020-06-21|1    |
+----------+-----+

【讨论】:

  • 是的!谢谢。对于其他任何人,我不得不将 .groupBy('timestamp') 更改为 .groupBy(window(df['timestamp']) 因为我的 df 在日期之间没有如所述的清晰分隔。
猜你喜欢
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
相关资源
最近更新 更多