Pyspark:根据结果计算过滤数据

时间:2016-07-24 14:31:04

标签: apache-spark pyspark spark-dataframe

我有一个数据框,其中包含三列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        |  
+----------+----------+-----------------------+  

基本上我想过滤聚合值,如何过滤它?在过滤器上尝试了一些选项,但是不起作用。

1 个答案:

答案 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')]