【发布时间】:2020-10-14 04:16:49
【问题描述】:
我是 spark 和 SQL 的新手,我正在尝试做一些查询。目前我有一个包含一堆列的数据框(df),但我对我选择的 4 列感兴趣,它们看起来像这样:
Start Stop Price Distance
1 2 10 2
1 3 20 4
1 4 30 3
1 1 5 2
1 2 15 4
1 2 25 6
2 1 10 3
3 2 30 5
我需要的是通过两点之间的旅行次数来找到前 5 个起点。如果出现平局,那么平局断路器是另一列 price_rate,它由两个位置之间的平均价格计算得出。所以答案应该如下所示,其中 4.166 是 (10+15+25)/(2+4+6)
Start Stop Count Price_Rate
1 2 3 4.166
1 4 1 10.00
3 2 1 6.00
1 3 1 5.00
2 1 1 3.33
到目前为止我所做的是
df2 = df.withColumn('Price_rate', col('Price')/col('Distance'))
df3 = df2.select(['Start','Stop','Price_rate'])\
.orderBy(col("Price_rate").desc())\
.groupBy("Start","Stop")\
.count().orderBy(col('count).desc())
这绝对行不通,因为我不是对价格进行平均,而是按降序排列。我不知道如何调用查询,所以我可以聚合平均值,然后按计数分组。任何提示都会有所帮助。我知道也有一些方法可以调用 SQL 查询,因此任何一种方法都会有所帮助。
【问题讨论】: