【问题标题】:How to calculate the average of rows between a start index and end index of a column in a dataframe in Spark using Scala?如何使用Scala计算Spark中数据框中列的开始索引和结束索引之间的行的平均值?
【发布时间】:2019-07-24 17:31:05
【问题描述】:

我有一个带有浮点类型值的列的 spark 数据框。我试图找到第 11 行到第 20 行之间的平均值。请注意,我没有尝试任何类型的移动平均线。我尝试像这样使用分区窗口 -

var avgClose= avg(priceDF("Close")).over(partitionWindow.rowsBetween(11,20))

它返回一个“org.apache.spark.sql.Column”结果。我不知道如何查看avgClose

我是 Spark 和 Scala 的新手。感谢您在获得此信息方面的帮助。

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    为您的表分配一个递增的 id。然后你可以在 id 之间做一个平均。

    val df =  Seq(20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1).toDF("val1")
    val dfWithId = df.withColumn("id", monotonically_increasing_id())
    val avgClose= dfWithId.filter($"id" >= 11 && $"id" <= 20).agg(avg("val1"))
    avgClose.show()
    

    结果:

    +---------+
    |avg(val1)|
    +---------+
    |      5.0|
    +---------+
    

    【讨论】:

    • 谢谢扎克!那工作得很好。我是 Spark 的新手,不知道 monotonically_increasing_id()。这将在未来的几个方面有所帮助。干杯!
    • 完全没问题@AkdeEdge!如果您愿意,请接受这个作为答案。
    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2018-07-24
    • 2016-11-17
    • 1970-01-01
    相关资源
    最近更新 更多