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

时间:2018-11-27 03:33:17

标签: scala sorting apache-spark dataframe apache-spark-sql

比方说,我有一张这样的桌子:

A,B
2,6
1,2
1,3
1,5
2,3

我想对列A进行升序排序,但是在其中我想对列B进行降序排序,就像这样:

A,B
1,5
1,3
1,2
2,6
2,3

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

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

2 个答案:

答案 0 :(得分:7)

使用列方法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|
// +---+---+

答案 1 :(得分:4)

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

df.orderBy($"A", $"B".desc)

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