Як сортувати за стовпцем у порядку зменшення в Spark SQL?


137

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


2
Він означає "df.sort (" col1 "). Show (10) також сортує у порядку зростання "
Йосія Йодер

Це рішення для мене чудово працювало: stackoverflow.com/a/38575271/5957143
abc123

Відповіді:


214

Ви також можете сортувати стовпчик, імпортуючи функції spark 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, потрібно імпортувати функції / імпліцити, як описано вище, щоб уникнути цієї помилки
Ример

41

Тільки PySpark

Я натрапив на цю посаду, шукаючи зробити те саме в PySpark. Найпростіший спосіб - просто додати параметр висхідний = 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
Це повторювана відповідь, отримана на 3 роки раніше від @AmitDubey. слід вилучити на користь цього.
javadba


2

У випадку з Java:

Якщо ми використовуємо DataFrames, застосовуючи приєднання (тут Inner join), ми можемо сортувати (в 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.