如何在Spark SQL中按列降序排序?

179

我尝试了 df.orderBy("col1").show(10) 但是它按升序排序。 df.sort("col1").show(10) 也按升序排序。我在stackoverflow上查找答案,但发现所有答案都过时了或者只适用于RDD。我想使用Spark中的本地DataFrame。


3
他的意思是,"df.sort('col1').show(10)" 也会按 升序 进行排序。 - Josiah Yoder
这个解决方案对我非常有效:https://dev59.com/XlkT5IYBdhLWcg3wc_NR#38575271 - abc123
6个回答

259
您也可以通过导入Spark SQL函数来对该列进行排序。
import org.apache.spark.sql.functions._
df.orderBy(asc("col1"))

或者
import org.apache.spark.sql.functions._
df.sort(desc("col1"))

导入 sqlContext.implicits._

import sqlContext.implicits._
df.orderBy($"col1".desc)

或者
import sqlContext.implicits._
df.sort($"col1".desc)

当您按所有列升序排序时,不需要使用“asc”关键字:..orderBy("col1", "col2") - Dan

115

sort 方法的实现在 org.apache.spark.sql.DataFrame 中。

df.sort($"col1", $"col2".desc)

sort 内部使用 $.desc 来按列对结果进行排序。


5
import org.apache.spark.sql.functions._import sqlContext.implicits._ 还可以为您提供许多不错的功能。 - David Griffin
6
@Vedom出现语法错误: df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntax,$符号出了问题。 - kavya
@kaks,需要按照上述描述导入函数/隐式转换以避免该错误。 - Rimer

75

12
这个问题被打上了Scala标签,但是这个答案只适用于Python,因为这个语法和函数签名只在Python中存在。 - Viacheslav Rodionov

21
import org.apache.spark.sql.functions.desc

df.orderBy(desc("columnname1"),desc("columnname2"),asc("columnname3"))

1
这是一个重复的答案,与3年前@AmitDubey的答案相同。应该删除并使用那个答案。 - WestCoastProjects

8
df.sort($"ColumnName".desc).show()

3
在Java中:
如果我们使用DataFrames,并应用连接(这里是内部连接),我们可以在选择每个DF的不同元素后进行排序(以ASC方式):
Dataset<Row> d1 = e_data.distinct().join(s_data.distinct(), "e_id").orderBy("salary");

其中e_id是应用连接的列,按工资升序排序。

此外,我们也可以使用Spark SQL:

SQLContext sqlCtx = spark.sqlContext();
sqlCtx.sql("select * from global_temp.salary order by salary desc").show();

这里是

  • Spark -> SparkSession
  • salary -> 全局临时视图(GlobalTemp View)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接