Как отсортировать по столбцу в порядке убывания в Spark SQL?


137

Я пробовал, df.orderBy("col1").show(10)но сортировка по возрастанию. df.sort("col1").show(10)также сортирует в порядке убывания. Я посмотрел на stackoverflow, и все ответы, которые я нашел, были устаревшими или относились к RDD . Я хотел бы использовать собственный фрейм данных в Spark.


2
Он означает "df.sort (" col1 "). Show (10) также сортирует в порядке возрастания "
Джозайя Йодер

Это решение отлично сработало для меня: stackoverflow.com/a/38575271/5957143
abc123

Ответы:


214

Вы также можете отсортировать столбец, импортировав sql-функции искры

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

Или

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

импорт sqlContext.implicits._

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

Или

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

Кроме того, когда Вы заказываете в порядке возрастания всех столбцов, то ascключевое слово не нужно: ..orderBy("col1", "col2").
Дан

91

Это org.apache.spark.sql.DataFrameдля sortметода:

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

Обратите внимание $и .descвнутри sortстолбца для сортировки результатов.


5
import org.apache.spark.sql.functions._а import sqlContext.implicits._также получить много приятных функций.
Дэвид Гриффин

4
@Vedom: показывает синтаксическую ошибку: df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntaxу символа $
kaks

@kaks, необходимость функций импорта / implicits , как описано выше , чтобы избежать этой ошибки
Ример

41

Только PySpark

Я наткнулся на этот пост, когда хотел сделать то же самое в PySpark. Самый простой способ - просто добавить параметр ascending = False:

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

Ссылка: http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.DataFrame.orderBy


8
Вопрос отмечен тегом scala, но этот ответ предназначен только для Python, поскольку этот синтаксис, а также сигнатура функции предназначены только для Python.
Вячеслав Родионов

1
Спасибо! Искал версию PySpark.
arrkaye

12
import org.apache.spark.sql.functions.desc

df.orderBy(desc("columnname1"),desc("columnname2"),asc("columnname3"))

1
Это дубликат ответа @AmitDubey 3 года назад. следует удалить в пользу этого.
javadba


2

В случае Java:

Если мы используем DataFramesпри применении объединений (здесь Внутреннее соединение), мы можем сортировать (в ASC) после выбора отдельных элементов в каждом DF как:

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

где e_id - столбец, к которому применяется объединение при сортировке по зарплате в ASC.

Кроме того, мы можем использовать Spark SQL как:

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

где

  • искра -> SparkSession
  • зарплата -> Просмотр GlobalTemp.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.