Python 查询另一个数据帧查询的结果
使用用于Python的spark和Pandas库。 我基本上有以下几点:Python 查询另一个数据帧查询的结果,python,sql,pandas,apache-spark,dataframe,Python,Sql,Pandas,Apache Spark,Dataframe,使用用于Python的spark和Pandas库。 我基本上有以下几点: df.groupby('sIP').agg({'duration': 'sum'}).show() 这给了我以下输出: +---------------+------------------+ | sIP| sum(duration)| +---------------+-----------------
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。因此,我必须在数据帧被修改后查询它(上面的查询)
所以我试着:
df.groupby('sIP').agg({'duration': 'max'}).show()
但它仍然查询原始数据帧,如下所示:
+---------------+-------------+
| 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|
是否仍要覆盖数据帧状态?我研究过转换,但没有成功,collect()是我研究过的另一个东西,但仍然没有任何结果
我错过了什么
提前感谢。您可以使用
排序\u值
+尾部
df.groupby('sIP').agg({'duration': 'sum'}).sort_values('sum(duration)').tail(1)
斯卡拉
皮斯帕克
import pyspark.sql.functions as F
df.groupBy("ip").agg(F.sum("duration").alias("sum_duration")).agg(F.max("sum_duration")).show()
您需要将第一次转换保存到新的数据帧,否则结果将被丢弃
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)
我不能把它们结合在一起。但是第一个解决方案(单独的)非常有效。非常感谢。
df.groupby('sIP').agg({'duration': 'max'}).sort('max(duration)', ascending=False).show(1)