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