使用不同顺序的两列对Spark Dataframe进行排序

kel*_*llo 3 sorting scala dataframe apache-spark apache-spark-sql

比方说,我有一个这样的表:

A,B
2,6
1,2
1,3
1,5
2,3
Run Code Online (Sandbox Code Playgroud)

我想按列的升序排序,A但在其中我想按列的降序对其进行排序B,如下所示:

A,B
1,5
1,3
1,2
2,6
2,3
Run Code Online (Sandbox Code Playgroud)

我试过使用,orderBy("A", desc("B"))但它给出了一个错误.

我应该如何在Spark 2.0中使用数据框编写查询?

Leo*_*o C 8

使用Column方法desc,如下所示:

val df = Seq(
  (2,6), (1,2), (1,3), (1,5), (2,3)
).toDF("A", "B")

df.orderBy($"A", $"B".desc).show
// +---+---+
// |  A|  B|
// +---+---+
// |  1|  5|
// |  1|  3|
// |  1|  2|
// |  2|  6|
// |  2|  3|
// +---+---+
Run Code Online (Sandbox Code Playgroud)


Sha*_*ica 5

desc是正确的使用方法,但并不是说它是Columnn类中的方法。因此,应按如下方式应用:

df.orderBy($"A", $"B".desc)
Run Code Online (Sandbox Code Playgroud)

$"B".desc返回一列,因此"A"也必须更改为$"A"(或者col("A")如果未导入 spark 隐式)。