【问题标题】:rank() function usage in Spark SQLSpark SQL 中 rank() 函数的使用
【发布时间】:2017-07-25 20:33:25
【问题描述】:

在使用rank()时需要一些指导

我从数据集中提取了一列..需要进行排名。

Dataset<Row> inputCol= inputDataset.apply("Colname");    
Dataset<Row>  DSColAwithIndex=inputDSAAcolonly.withColumn("df1Rank", rank());

DSColAwithIndex.show();

我可以对列进行排序,然后也附加一个索引列来获得排名……但对rank()的已知语法和用法感到好奇

【问题讨论】:

  • 你必须使用窗口函数的方式,因为rank和dense_rank是窗口函数
  • 错误信息是什么?你能把它包括在问题中吗?
  • 错误:线程“main”中的异常 java.lang.UnsupportedOperationException:无法评估表达式:rank()

标签: java apache-spark apache-spark-sql window-functions rank


【解决方案1】:

需要为rank()指定Window规范

val w = org.apache.spark.sql.expressions.Window.orderBy("date") //some spec    

val leadDf = inputDSAAcolonly.withColumn("df1Rank", rank().over(w))

编辑:Java 版本的答案,作为使用 Java 的 OP

import org.apache.spark.sql.expressions.WindowSpec; 
WindowSpec w = org.apache.spark.sql.expressions.Window.orderBy(colName);
Dataset<Row> leadDf = inputDSAAcolonly.withColumn("df1Rank", rank().over(w));

【讨论】:

  • 谢谢...在java中尝试了以下...工作正常... import org.apache.spark.sql.expressions.WindowSpec; WindowSpec w = org.apache.spark.sql.expressions.Window.orderBy(colName);数据集 leadDf = inputDSAAcolonly.withColumn("df1Rank", rank().over(w));
【解决方案2】:

我一直在寻找这个,在 java 中对我的数据框应用排名。

使用上述评论中提供的答案,

import org.apache.spark.sql.expressions.WindowSpec; 
WindowSpec w = org.apache.spark.sql.expressions.Window.orderBy(colName);
Dataset<Row> leadDf = inputDSAAcolonly.withColumn("df1Rank", rank().over(w));

为我工作, 谢谢 高拉夫。

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多