当前位置: 首页 > 知识库问答 >
问题:

如何使用orderby()与降序在火花窗口函数?

羊舌旭尧
2023-03-14

我需要一个窗口函数,该函数按一些键(=列名)进行分区,按另一个列名排序,并返回排名前x的行。

这适用于升序:

def getTopX(df: DataFrame, top_x: String, top_key: String, top_value:String): DataFrame ={
    val top_keys: List[String] = top_key.split(", ").map(_.trim).toList
    val w = Window.partitionBy(top_keys(1),top_keys.drop(1):_*)
       .orderBy(top_value)
    val rankCondition = "rn < "+top_x.toString
    val dfTop = df.withColumn("rn",row_number().over(w))
      .where(rankCondition).drop("rn")
  return dfTop
}

但当我试图在第4行中将其更改为orderBy(desc(top_value))orderBy(top_value.desc)时,我得到了一个语法错误。这里的正确语法是什么?

共有3个答案

晏沈义
2023-03-14

col = new Column("ts")
col = col.desc()
WindowSpec w = Window.partitionBy("col1", "col2").orderBy(col)
吴浩博
2023-03-14

例如,如果我们需要在Window函数中按降序排列名为Date的列,请在列名称前使用$符号,这将使我们能够使用ascdesc语法。

Window.orderBy($"Date".desc)

用双引号指定列名后,给出. desc,它将按降序排序。

华俊弼
2023-03-14

有两个版本的orderBy,一个用于字符串,另一个用于对象(API)。您的代码使用的是第一个版本,不允许更改排序顺序。您需要切换到列版本,然后调用desc方法,例如mycl。描述

现在,我们进入API设计领域。传递参数的优点是,您有更大的灵活性,例如,您可以使用表达式等。如果您想维护一个API,该API接收字符串而不是,则需要将字符串转换为列。有很多方法可以做到这一点,最简单的方法是使用org。阿帕奇。火花sql。功能。col(myColName)

综合起来,我们得到了

.orderBy(org.apache.spark.sql.functions.col(top_value).desc)
 类似资料:
  • 我有一个每周客户和商店信息数据集, 问题-我必须计算的特征,如总独特的客户在最近1,2,3,4,5,6周..等,截至当前的一周。 我在使用count distinct of customers column over window函数时出错- 我尝试了concat函数创建数组,也没有工作-谢谢帮助! 错误-SQL编译错误:distinct不能与窗口框架或订单一起使用。 如何修复此错误? 输入 输出

  • 选择无状态滑动窗口操作的一些注意事项是什么(例如,通过updateStateByKey或新mapStateByKey)选择保持状态(例如通过updateStateByKey或新mapStateByKey)时,使用火花流处理连续的有限事件会话流? 例如,考虑以下场景: 一种可穿戴设备跟踪由穿戴者进行的体育锻炼。该装置自动检测何时开始锻炼,并发出信息;在锻炼过程中发出附加信息(如心率);最后,当练习完

  • 我有一个timeseries数据集,它由id分区,并由时间戳排序。示例: 我有一些自定义逻辑,我需要计算,它应该在每个窗口,每个分区内完成。我知道Spark对窗口函数有丰富的支持,我正试图将其用于此目的。 我需要做一些类似的事情: 如何将每个分区中记录总数作为标量值获取?我还添加了计数“my_cnt”值,它添加了分区的总价值,但在我的情况下似乎无法使用它。

  • 我注意到,当我在DataFrame上使用窗口函数后,如果我用函数调用map()时,Spark会返回一个“Task not serializable”异常这是我的代码: 这是堆栈跟踪: 异常:任务不可序列化在org.apache.spark.util.ClosureCleaner$.EnsureClealizable(ClosureCleaner.scala:304)在org.apache.spar

  • 问题内容: 每当用户接近文档顶部时,我都会尝试向下滚动100px。 当用户接近文档顶部时,我执行了该函数,但是.scrollTo函数不起作用。 我在之前和之后放置了一个警报,以检查它实际上是否是阻止该行的线路,并且只有第一个警报响起,这是代码: 我知道我的jquery页面链接正确,因为我在整个过程中都使用了许多其他jquery函数,而且它们都可以正常工作。我也尝试过从上方删除“ px”,但似乎没有

  • 与group by/join相比,我对在窗口上运行聚合函数的性能特征感兴趣。在本例中,我对具有自定义帧边界或顺序的窗口函数不感兴趣,而只是作为运行聚合函数的一种方式。 请注意,我只对大小适中的数据量的批处理(非流式)性能感兴趣,因此我禁用了以下广播连接。 例如,假设我们从以下DataFrame开始: 假设我们想要计算每个名称出现的次数,然后为具有匹配名称的行提供该计数。 根据执行计划,窗口化看起来