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.


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)

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.


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


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"))

1
Dies ist eine doppelte Antwort von @AmitDubey aus der Zeit vor 3 Jahren. sollte zugunsten dieses entfernt werden.
Javadba


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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.