¿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.


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)

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.


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


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

1
Esta es una respuesta duplicada de la de hace 3 años por @AmitDubey. debe ser eliminado a favor de ese.
javadba


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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.