1
resposta

Essa questão do OrderBy está com alternativa incorreta. Certo?

A questão mostra a solução no qual ordena os alunos da ordem dos alunos mais velhos ao mais novos, enquanto o enunciado pede o oposto, a ordenação dos alunos mais novos ao mais velhos.

a resposta correta no meu entendimento seria assim:

df\
.select('*')\
.orderBy(['ano', 'mes'], ascending = [True, True])\
.show(10, truncate=False)

#ordenação dos alunos mais novos ao mais velhos

1 resposta

Olá, Hayron! Tudo bem com você?

O parâmetro ascending ordena em ordem crescente caso seu valor seu True. Portanto se colocarmos que queremos ordenar o ano em ordem crescente os menores valores aparecerão primeiro e dessa forma estaríamos ordenando os alunos mais velhos para os mais novos. Da forma como você está colocando a saída será:

+---------------------+---+----+
|nome                 |mes|ano |
+---------------------+---+----+
|BRENO VENTUROSO      |1  |2009|
|JOAO BOSCO DA FONSECA|3  |2009|
|ADELINA TEIXEIRA     |5  |2009|
|HERONDINA PEREIRA    |6  |2009|
|WALTER DIAS          |9  |2009|
|CARLITO SOUZA        |1  |2010|
|CARMINA RABELO       |4  |2010|
|DENIS FONSECA        |6  |2010|
|ELIO SILVA           |7  |2010|
|IRANI DOS SANTOS     |12 |2010|
+---------------------+---+----+

Percebe que os alunos mais novos ficaram mais abaixo da tabela? portanto como o enunciado pede para "ordenar este DataFrame dos alunos mais novos para os mais velhos." os alunos que nasceram primeiro devem vir antes, logo o código correto será:

df\
    .select('*')\
    .orderBy(['ano', 'mes'], ascending=[False, False])\
    .show(truncate=False)

Saída

+---------------------+---+----+
|nome                 |mes|ano |
+---------------------+---+----+
|IRANI DOS SANTOS     |12 |2010|
|ELIO SILVA           |7  |2010|
|DENIS FONSECA        |6  |2010|
|CARMINA RABELO       |4  |2010|
|CARLITO SOUZA        |1  |2010|
|WALTER DIAS          |9  |2009|
|HERONDINA PEREIRA    |6  |2009|
|ADELINA TEIXEIRA     |5  |2009|
|JOAO BOSCO DA FONSECA|3  |2009|
|BRENO VENTUROSO      |1  |2009|
+---------------------+---+----+

Dessa forma ordenamos quem nasceu primeiro aparecendo primeiro no DataFrame.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!