Spark SQLで列を降順に並べ替える方法は?


137

試しましたdf.orderBy("col1").show(10)が、昇順でソートしました。df.sort("col1").show(10)また、降順で並べ替えます。私はstackoverflowを調べましたが、見つかった回答はすべて古くなっているか、RDDと呼ばれていました。スパークでネイティブデータフレームを使用したいと思います。


2
彼は"df.sort(" COL1 ")を意味ショー(10)もでソートします。昇順順序を"
ジョサイアYoderの

このソリューションは私にとって完璧に機能しました:stackoverflow.com/a/38575271/5957143
abc123 '06 / 11/18

回答:


214

また、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

91

それorg.apache.spark.sql.DataFramesortメソッドの中にあります:

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

$および.desc内部sortで結果をソートする列の。


5
import org.apache.spark.sql.functions._そしてimport sqlContext.implicits._また、あなたの素敵な機能の多くを得ます。
デビッドグリフィン、

4
@Vedom:ショー構文エラー:df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntax$記号で
kaks

@kaks、そのエラーを回避するには、上記のように関数/暗黙関数をインポートする必要があります
Rimer

41

PySparkのみ

PySparkで同じことをしようとしたときに、この投稿に出くわしました。最も簡単な方法は、パラメーター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


8
質問にはscalaタグが付いていますが、この構文と関数のシグネチャはpython専用であるため、この回答はpython専用です。
Viacheslav Rodionov

1
ありがとう!PySparkバージョンを探していました。
到着

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

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

1
これは、@ AmitDubeyによる3年前の回答と重複しています。削除してください。
javadba


2

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ビュー。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.