¿Cómo ordenar por columna en orden descendente en Spark SQL?

137

Lo intenté df.orderBy("col1").show(10)pero se ordenó en orden ascendente. df.sort("col1").show(10)También se ordena en orden descendente. Miré en stackoverflow y las respuestas que encontré estaban todas desactualizadas o referidas a RDD . Me gustaría usar el marco de datos nativo en spark.

Vedom
fuente
2
Significa "df.sort (" col1 "). Show (10) también se ordena en orden ascendente "
Josiah Yoder
Esta solución funcionó perfectamente para mí: stackoverflow.com/a/38575271/5957143
abc123

Respuestas:

214

También puede ordenar la columna importando las funciones de spark sql

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

O

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

importando sqlContext.implicits._

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

O

import sqlContext.implicits._
df.sort($"col1".desc)
Gabber
fuente
también cuando se está ordenando ascendente por todas las columnas, la ascpalabra clave no es necesario: ..orderBy("col1", "col2").
Dan
91

Está en org.apache.spark.sql.DataFramede sortmétodo:

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

Nota $y .descdentro sortde la columna para ordenar los resultados.

Vedom
fuente
55
import org.apache.spark.sql.functions._y import sqlContext.implicits._también te ofrece mucha funcionalidad agradable.
David Griffin
44
@Vedom: muestra un error de sintaxis: df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntaxen el símbolo $
kaks el
@kaks, necesita importar funciones / implicits como se describió anteriormente para evitar ese error
Rimer
41

Solo PySpark

Encontré esta publicación cuando buscaba hacer lo mismo en PySpark. La forma más fácil es simplemente agregar el parámetro ascendente = Falso:

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

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

Nic Scozzaro
fuente
8
La pregunta está marcada con una etiqueta scala, pero esta respuesta es solo para python ya que esta sintaxis y una firma de función son solo para python.
Viacheslav Rodionov
1
¡Gracias! Estaba buscando la versión PySpark.
arrkaye
12
import org.apache.spark.sql.functions.desc

df.orderBy(desc("columnname1"),desc("columnname2"),asc("columnname3"))
Nitya Yekkirala
fuente
1
Esta es una respuesta duplicada de la de hace 3 años por @AmitDubey. debe ser eliminado a favor de ese.
javadba
7
df.sort($"ColumnName".desc).show()
Nilesh Shinde
fuente
2

En el caso de Java:

Si usamos DataFrames, al aplicar combinaciones (aquí combinación interna), podemos ordenar (en ASC) después de seleccionar elementos distintos en cada DF como:

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

dónde e_id está la columna en la que se aplica la unión mientras se ordena por salario en ASC.

Además, podemos usar Spark SQL como:

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

dónde

  • chispa -> SparkSession
  • salario -> Vista GlobalTemp.
RPaul
fuente