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.