Como classificar por coluna em ordem decrescente no Spark SQL?

137

Eu tentei, df.orderBy("col1").show(10)mas classificou em ordem crescente. df.sort("col1").show(10)também classifica em ordem decrescente. Eu olhei no stackoverflow e as respostas que encontrei estavam desatualizadas ou se referiam a RDDs . Eu gostaria de usar o dataframe nativo no spark.

Vedom
fonte
2
Ele quer dizer "df.sort (" col1 "). Show (10) também classifica em ordem crescente "
Josiah Yoder
Esta solução funcionou perfeitamente para mim: stackoverflow.com/a/38575271/5957143
abc123

Respostas:

214

Você também pode classificar a coluna importando as funções spark sql

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

Ou

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

importando sqlContext.implicits._

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

Ou

import sqlContext.implicits._
df.sort($"col1".desc)
Gabber
fonte
também quando você está requisitando crescente por todas as colunas, a ascpalavra-chave não é necessário: ..orderBy("col1", "col2").
Dan
91

É org.apache.spark.sql.DataFramepara o sortmétodo:

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

Observe $e .descdentro sortda coluna para classificar os resultados.

Vedom
fonte
5
import org.apache.spark.sql.functions._e import sqlContext.implicits._também oferece muitas funcionalidades interessantes.
David Griffin
4
@Vedom: Mostra um erro de sintaxe: df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntaxno símbolo $
kaks
@kaks, necessidade de funções de importação / implícitos como descritos acima, para evitar que o erro
Rimer
41

Apenas PySpark

Me deparei com este post ao tentar fazer o mesmo no PySpark. A maneira mais fácil é adicionar o parâmetro ascending = False:

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

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

Nic Scozzaro
fonte
8
A pergunta está marcada com uma tag scala, mas essa resposta é apenas para python, pois essa sintaxe e uma assinatura de função são apenas python.
Viacheslav Rodionov
1
Obrigado! Estava procurando a versão PySpark.
arrkaye
12
import org.apache.spark.sql.functions.desc

df.orderBy(desc("columnname1"),desc("columnname2"),asc("columnname3"))
Nitya Yekkirala
fonte
1
Esta é uma resposta duplicada da resposta de 3 anos antes por @AmitDubey. deve ser removido em favor daquele.
Javadba
7
df.sort($"ColumnName".desc).show()
Nilesh Shinde
fonte
2

No caso de Java:

Se usarmos DataFrames, ao aplicar junções (aqui Junção interna), podemos classificar (no ASC) após selecionar elementos distintos em cada DF como:

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

onde e_idé a coluna na qual a junção é aplicada enquanto classificada por salário no ASC.

Além disso, podemos usar o Spark SQL como:

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

Onde

  • spark -> SparkSession
  • salário -> Visão GlobalTemp.
RPaul
fonte