Come ordinare per colonna in ordine decrescente in Spark SQL?


137

Ho provato, df.orderBy("col1").show(10)ma ha ordinato in ordine crescente. df.sort("col1").show(10)ordina anche in ordine decrescente. Ho esaminato StackOverflow e le risposte che ho trovato erano tutte obsolete o riferite a RDD . Vorrei usare il frame di dati nativo in Spark.


2
Intende "df.sort (" col1 "). Show (10) ordina anche in ordine crescente "
Josiah Yoder,

Questa soluzione ha funzionato perfettamente per me: stackoverflow.com/a/38575271/5957143
abc123

Risposte:


214

È inoltre possibile ordinare la colonna importando le funzioni spark sql

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

O

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

importazione sqlContext.implicits._

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

O

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

anche quando stai ordinando ascendente da tutte le colonne, la ascparola chiave non è necessaria: ..orderBy("col1", "col2").
Dan

91

E 'in org.apache.spark.sql.DataFrameper sortil metodo:

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

Nota $ e .descdentro sortper la colonna per ordinare i risultati per.


5
import org.apache.spark.sql.functions._e import sqlContext.implicits._ti procurano anche molte belle funzionalità.
David Griffin,

4
@Vedom: mostra un errore di sintassi: df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntaxal simbolo $
kaks

@kaks, è necessario importare funzioni / impliciti come descritto sopra per evitare tale errore
Rimer

41

Solo PySpark

Mi sono imbattuto in questo post quando ho cercato di fare lo stesso in PySpark. Il modo più semplice è aggiungere semplicemente il parametro ascending = False:

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

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


8
La domanda è contrassegnata da un tag scala, ma questa risposta è solo per Python in quanto questa sintassi e la firma di una funzione sono solo Python.
Viacheslav Rodionov,

1
Grazie! Stavo cercando la versione di PySpark.
arrkaye,

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

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

1
Questa è una risposta duplicata da quella di 3 anni prima di @AmitDubey. dovrebbe essere rimosso a favore di quello.
javadba,


2

Nel caso di Java:

Se utilizziamo DataFrames, mentre applichiamo i join (qui Inner join), possiamo ordinare (in ASC) dopo aver selezionato elementi distinti in ciascun DF come:

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

dove e_id trova la colonna su cui viene applicato il join mentre viene ordinato in base allo stipendio in ASC.

Inoltre, possiamo usare Spark SQL come:

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

dove

  • spark -> SparkSession
  • stipendio -> GlobalTemp View.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.