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

How to sort by column in descending order in Spark SQL?

我试过 df.orderBy("col1").show(10) 但它按升序排序。 df.sort("col1").show(10) 也按升序排序。我查看了 Whosebug,发现的答案都已过时或 referred to RDDs。我想在 spark 中使用本机数据框。

它在 org.apache.spark.sql.DataFrame 中用于 sort 方法:

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

请注意 sort 内的 $.desc 作为结果排序依据的列。

您还可以通过导入 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)
df.sort($"ColumnName".desc).show()

仅限 PySpark

我想在 PySpark 中做同样的事情时遇到了这个 post。最简单的方法是只添加参数 ascending=False:

df.orderBy("col1", ascending=False).show(10)

参考:http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.DataFrame.orderBy

在Java的情况下:

如果我们使用 DataFrames,在应用联接(此处为内部联接)时,我们可以在每个 DF 中选择不同的元素后(在 ASC 中)排序:

Dataset<Row> d1 = e_data.distinct().join(s_data.distinct(), "e_id").orderBy("salary");

其中 e_id 是在 ASC 中按薪水排序时应用联接的列。

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

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

其中

  • spark -> SparkSession
  • 工资 -> GlobalTemp 视图。
import org.apache.spark.sql.functions.desc

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