Jak sortować według kolumn w kolejności malejącej w Spark SQL?

145

Próbowałem, df.orderBy("col1").show(10)ale posortowano w kolejności rosnącej. df.sort("col1").show(10)sortuje również w porządku malejącym. Spojrzałem na stackoverflow i wszystkie odpowiedzi, które znalazłem, były nieaktualne lub odnosiły się do RDD . Chciałbym użyć natywnej ramki danych w Spark.

Vedom
źródło
2
Oznacza "df.sort (" col1 "). Show (10) również sortuje w porządku rosnącym "
Josiah Yoder
To rozwiązanie działało idealnie dla mnie: stackoverflow.com/a/38575271/5957143
abc123

Odpowiedzi:

223

Możesz również posortować kolumnę, importując funkcje spark sql

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

Lub

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

importowanie sqlContext.implicits._

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

Lub

import sqlContext.implicits._
df.sort($"col1".desc)
Gabber
źródło
również wtedy, gdy jesteś zamawiania rosnąco po wszystkich kolumn, ascsłowo kluczowe nie jest konieczne: ..orderBy("col1", "col2").
Dan
97

Jest w org.apache.spark.sql.DataFramena sortmetodzie:

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

Zwróć uwagę $i .descwewnątrz sortkolumny, według której chcesz posortować wyniki.

Vedom
źródło
5
import org.apache.spark.sql.functions._a import sqlContext.implicits._także wiele fajnych funkcji.
David Griffin
5
@Vedom: Pokazuje błąd składni: df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntaxprzy symbolu $
kaks,
@kaks, musisz zaimportować funkcje / implicity, jak opisano powyżej, aby uniknąć tego błędu
Rimer
49

Tylko PySpark

Natknąłem się na ten post, gdy chciałem zrobić to samo w PySpark. Najłatwiej jest po prostu dodać parametr ascending = False:

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

Źródła: http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.DataFrame.orderBy

Nic Scozzaro
źródło
8
Pytanie jest oznaczone tagiem scala, ale ta odpowiedź dotyczy tylko Pythona, ponieważ ta składnia, jak również sygnatura funkcji, dotyczą tylko języka Python.
Viacheslav Rodionov
3
Dzięki! Szukałem wersji PySpark.
arrkaye
14
import org.apache.spark.sql.functions.desc

df.orderBy(desc("columnname1"),desc("columnname2"),asc("columnname3"))
Nitya Yekkirala
źródło
1
To jest duplikat odpowiedzi z odpowiedzi udzielonej 3 lata wcześniej przez @AmitDubey. powinien zostać usunięty na korzyść tego.
javadba
7
df.sort($"ColumnName".desc).show()
Nilesh Shinde
źródło
2

W przypadku Javy:

Jeśli użyjemy DataFrames, podczas stosowania złączeń (tutaj złączenie wewnętrzne), możemy posortować (w ASC) po wybraniu różnych elementów w każdym DF jako:

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

gdzie e_idjest kolumna, w której zastosowano łączenie, gdy jest sortowana według wynagrodzenia w ASC.

Możemy również użyć Spark SQL jako:

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

gdzie

  • spark -> SparkSession
  • wynagrodzenie -> GlobalTemp View.
RPaul
źródło