0
我有一個數據框,其中包含三列,timestamp, hostname, and num_denied
。我想總結num_denied
基於groupby
的timestamp and hostname
和顯示結果,其中,num_denied
大於一個值(比如500000)。Pyspark:根據結果計算過濾數據
例子:
>>> 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)
這樣我們就可以得到結果lt
+----------+----------+-----------------------+
| Time| Hostname|sum(num_denied) > 60000|
+----------+----------+-----------------------+
|1456855800|hostname.0| 1507741 |
|1456855800|hostname.1| 1441778 |
|1456855800|hostname.2| 1428479 |
+----------+----------+-----------------------+
基本上我想過濾聚合值,它如何過濾它?嘗試過濾器的選項很少,但不起作用。
上面的命令拋出一個錯誤說總和(num_denied)不是數據幀(列)的一部分 - 「無法解析列名中(時間,主機名,num_denied)‘總和(num_denied)’;」。我可以將結果存儲在另一個數據框中並過濾結果。基本上df ['sum(num_denied)']不是df的一部分。任何解決方案單線執行? –