为Python使用spark和Pandas库。 我基本上有以下内容:
df.groupby('sIP').agg({'duration': 'sum'}).show()
这给了我以下输出:
+---------------+------------------+
| sIP| sum(duration)|
+---------------+------------------+
| 203.13.173.243| 0.0|
| 204.62.16.153| 17522.927|
| 203.30.177.95| 1.081|
| 56.23.191.99| 113.186|
所有不同源IP地址持续时间的总和。
我现在要做的是从该总和中获取最大值,并获取相关的源IP。所以我必须在修改后查询DataFrame(上面的查询)。
所以我试着:
df.groupby('sIP').agg({'duration': 'max'}).show()
但它仍然会查询原始DataFrame,如下所示:
+---------------+-------------+
| sIP|max(duration)|
+---------------+-------------+
| 203.13.173.243| 0.0|
| 204.62.16.153| 1790.305|
| 203.30.177.95| 1.081|
| 56.23.191.99| 22.563|
无论如何都要覆盖数据帧状态?我看过转换但没有成功,但收集()是我调查的另一件事,但仍然没有......
我错过了什么?
提前致谢。
答案 0 :(得分:0)
您可以使用sort_values
+ tail
df.groupby('sIP').agg({'duration': 'sum'}).sort_values('sum(duration)').tail(1)
答案 1 :(得分:0)
Scala的
df.groupBy("ip").agg(sum("duration").as("sum_duration")).agg(max("sum_duration")).show()
PySpark
import pyspark.sql.functions as F
df.groupBy("ip").agg(F.sum("duration").alias("sum_duration")).agg(F.max("sum_duration")).show()
答案 2 :(得分:0)
您需要将第一个转换保存到新的数据框,否则结果将被丢弃。
df1 = df.groupby('sIP').agg({'duration': 'max'}).toDF('sIP', 'max_duration')
然后您可以根据需要操作新的数据帧,即:
df1.sort('max_duration', ascending=False).show(1)
无论如何,您可以在没有中间数据帧的情况下进行一次转换:
df.groupby('sIP').agg({'duration': 'max'}).sort('max(duration)', ascending=False).show(1)