我有一个数据框,其中包含三列timestamp, hostname, and num_denied
。我想根据num_denied
groupby
总结timestamp and hostname
并显示结果,num_denied
大于值(比如500000)。
示例:
>>> df.show()
+----------+----------+----------+
| Time| Hostname|num_denied|
+----------+----------+----------+
|1456855800|hostname.2| 310|
|1456855800|hostname.0| 314|
|1456855800|hostname.0| 256|
|1456855800|hostname.2| 304|
现在,当我表演时 -
结果:
df.groupBy(['Time','Hostname']).agg({'num_denied':'sum'}).show()
+----------+----------+---------------+
| Time| Hostname|sum(num_denied)|
+----------+----------+---------------+
|1456855800|hostname.0| 1507741|
|1456855800|hostname.1| 1441778|
|1456855800|hostname.2| 1428479|
|1456855860|hostname.0| 501624|
|1456855860|hostname.1| 504208|
|1456855860|hostname.2| 517899|
+----------+----------+---------------+
问题:
你如何进一步减少上面的结果表,如
Pusedo代码 df.groupBy(['Time','Hostname']).agg({'num_denied':'sum'} > 60000)
以便我们获得结果
+----------+----------+-----------------------+
| Time| Hostname|sum(num_denied) > 60000|
+----------+----------+-----------------------+
|1456855800|hostname.0| 1507741 |
|1456855800|hostname.1| 1441778 |
|1456855800|hostname.2| 1428479 |
+----------+----------+-----------------------+
基本上我想过滤聚合值,如何过滤它?在过滤器上尝试了一些选项,但是不起作用。
答案 0 :(得分:0)
尝试:
df.groupBy(['Time','Hostname']).agg({'num_denied':'sum'}).filter(df['sum(num_denied)']>6000).show()
https://spark.apache.org/docs/1.6.1/api/python/pyspark.sql.html
filter(condition) - 使用给定条件过滤行。
df.filter(df.age > 3).collect()
[Row(age=5, name=u'Bob')]