Wie sortiere ich in Spark SQL nach Spalten in absteigender Reihenfolge?

136

Ich habe es versucht, df.orderBy("col1").show(10)aber es wurde in aufsteigender Reihenfolge sortiert. df.sort("col1").show(10)sortiert auch in absteigender Reihenfolge. Ich habe mir den Stackoverflow angesehen und die Antworten, die ich gefunden habe, waren alle veraltet oder bezogen sich auf RDDs . Ich möchte den nativen Datenrahmen in Spark verwenden.

Freiheit
quelle
2
Er meint "df.sort (" col1 "). Show (10) sortiert auch in aufsteigender Reihenfolge"
Josiah Yoder
Diese Lösung funktionierte perfekt für mich: stackoverflow.com/a/38575271/5957143
abc123

Antworten:

214

Sie können die Spalte auch sortieren, indem Sie die Spark-SQL-Funktionen importieren

import org.apache.spark.sql.functions._
df.orderBy(asc("col1"))

Oder

import org.apache.spark.sql.functions._
df.sort(desc("col1"))

Importieren von sqlContext.implicits._

import sqlContext.implicits._
df.orderBy($"col1".desc)

Oder

import sqlContext.implicits._
df.sort($"col1".desc)
Gabber
quelle
Auch wenn Sie nach allen Spalten aufsteigend bestellen, ist das ascSchlüsselwort nicht erforderlich : ..orderBy("col1", "col2").
Dan
91

Es ist in org.apache.spark.sql.DataFramefür sortMethode:

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

Beachten Sie $und .descinnerhalb sortder Spalte, nach der die Ergebnisse sortiert werden sollen.

Freiheit
quelle
5
import org.apache.spark.sql.functions._und import sqlContext.implicits._Sie erhalten auch viele nette Funktionen.
David Griffin
4
@ Freiheit: Zeigt einen Syntaxfehler: df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntaxam $ Symbol
kaks
@kaks, müssen Funktionen / Implicits wie oben beschrieben importieren, um diesen Fehler zu vermeiden
Rimer
41

Nur PySpark

Ich bin auf diesen Beitrag gestoßen, als ich versucht habe, dasselbe in PySpark zu tun. Am einfachsten ist es, einfach den Parameter ascending = False hinzuzufügen:

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

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

Nic Scozzaro
quelle
8
Die Frage ist mit einem Scala-Tag gekennzeichnet. Diese Antwort gilt jedoch nur für Python, da diese Syntax sowie eine Funktionssignatur nur für Python gelten.
Viacheslav Rodionov
1
Vielen Dank! War auf der Suche nach der PySpark-Version.
Arrkaye
12
import org.apache.spark.sql.functions.desc

df.orderBy(desc("columnname1"),desc("columnname2"),asc("columnname3"))
Nitya Yekkirala
quelle
1
Dies ist eine doppelte Antwort von @AmitDubey aus der Zeit vor 3 Jahren. sollte zugunsten dieses entfernt werden.
Javadba
7
df.sort($"ColumnName".desc).show()
Nilesh Shinde
quelle
2

Im Fall von Java:

Wenn wir DataFramesbeim Anwenden von Joins (hier Inner Join) verwenden, können wir (in ASC) sortieren, nachdem wir in jedem DF unterschiedliche Elemente ausgewählt haben:

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

Wo e_idist die Spalte, auf die der Join angewendet wird, während er nach Gehalt in ASC sortiert ist?

Wir können Spark SQL auch verwenden als:

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

wo

  • spark -> SparkSession
  • Gehalt -> GlobalTemp View.
RPaul
quelle