J'ai essayé df.orderBy("col1").show(10)
mais le tri a été effectué dans l'ordre croissant. df.sort("col1").show(10)
effectue également un tri décroissant. J'ai regardé sur stackoverflow et les réponses que j'ai trouvées étaient toutes dépassées ou appelées RDDs . J'aimerais utiliser le cadre de données natif dans spark.
C'est dans org.Apache.spark.sql.DataFrame
pour la méthode sort
:
_df.sort($"col1", $"col2".desc)
_
Notez _$
_ et _.desc
_ à l'intérieur de sort
pour la colonne pour trier les résultats.
Vous pouvez également trier la colonne en important les fonctions spark sql
import org.Apache.spark.sql.functions._
df.orderBy(asc("col1"))
Ou
import org.Apache.spark.sql.functions._
df.sort(desc("col1"))
importation de sqlContext.implicits ._
import sqlContext.implicits._
df.orderBy($"col1".desc)
Ou
import sqlContext.implicits._
df.sort($"col1".desc)
PySpark uniquement
Je suis tombé sur ce post lorsque je voulais faire la même chose dans PySpark. Le plus simple est d’ajouter le paramètre ascending = False:
df.orderBy("col1", ascending=False).show(10)
Référence: http://spark.Apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.DataFrame.orderBy
import org.Apache.spark.sql.functions.desc
df.orderBy(desc("columnname1"),desc("columnname2"),asc("columnname3"))
df.sort($"ColumnName".desc).show()
Dans le cas de Java:
Si nous utilisons DataFrames
, tout en appliquant des jointures (ici joint interne), nous pouvons trier (en ASC) après avoir sélectionné des éléments distincts dans chaque DF comme:
Dataset<Row> d1 = e_data.distinct().join(s_data.distinct(), "e_id").orderBy("salary");
où e_id
est la colonne sur laquelle la jointure est appliquée tout en triant par salaire dans ASC.
De plus, nous pouvons utiliser Spark SQL comme:
SQLContext sqlCtx = spark.sqlContext();
sqlCtx.sql("select * from global_temp.salary order by salary desc").show();
où