【问题标题】:Getting the top 5 start-stop points获得前 5 个起点
【发布时间】: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 查询,因此任何一种方法都会有所帮助。

【问题讨论】:

    标签: python sql pyspark


    【解决方案1】:

    您可以使用.agg() 函数进行分组和聚合:

    from pyspark.sql import functions as F
    
    df.groupBy("Start", "Stop").agg(F.count("*").alias("Count"), (F.sum("Price")/F.sum("Distance"))\
            .alias("Price_Rate")).orderBy(["Count", "Price_Rate"], ascending=False).show()
    
    +-----+----+-----+------------------+                                           
    |Start|Stop|Count|        Price_Rate|
    +-----+----+-----+------------------+
    |    1|   2|    3| 4.166666666666667|
    |    1|   4|    1|              10.0|
    |    3|   2|    1|               6.0|
    |    1|   3|    1|               5.0|
    |    2|   1|    1|3.3333333333333335|
    |    1|   1|    1|               2.5|
    +-----+----+-----+------------------+
    

    【讨论】:

    • 非常感谢。这让我明白了很多!
    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2016-10-06
    相关资源
    最近更新 更多