web-dev-qa-db-ja.com

並べ替えSpark 2つの列が異なる順序のデータフレーム

たとえば、次のようなテーブルがあるとします。

_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)のデータフレームを使用してクエリをどのように記述すればよいですか?

4
kello

以下に示すように、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|
// +---+---+
8
Leo C

desc は正しいメソッドですが、Columnnクラスのメソッドではありません。したがって、次のように適用する必要があります。

_df.orderBy($"A", $"B".desc)
_

_$"B".desc_は列を返すため、_"A"_も_$"A"_に変更する必要があります(またはcol("A") if spark implicitsがインポートされていない場合) 。