Bagaimana cara mengurutkan berdasarkan kolom dalam urutan menurun di Spark SQL?


137

Saya mencoba df.orderBy("col1").show(10)tetapi diurutkan dalam urutan menaik. df.sort("col1").show(10)juga memilah dalam urutan menurun. Saya melihat stackoverflow dan jawaban yang saya temukan sudah ketinggalan jaman atau disebut RDD . Saya ingin menggunakan bingkai data asli di percikan.


2
Dia berarti "df.sort (" col1 "). Show (10) juga memilah dalam urutan naik "
Josiah Yoder

Solusi ini bekerja dengan baik untuk saya: stackoverflow.com/a/38575271/5957143
abc123

Jawaban:


214

Anda juga bisa mengurutkan kolom dengan mengimpor fungsi sql spark

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

Atau

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

mengimpor sqlContext.implicits._

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

Atau

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

juga ketika Anda memesan ascending oleh semua kolom, asckata kunci tidak diperlukan: ..orderBy("col1", "col2").
Dan

91

Ada dalam org.apache.spark.sql.DataFrameuntuk sortmetode:

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

Catatan $dan .descdi sortdalam kolom untuk mengurutkan hasil.


5
import org.apache.spark.sql.functions._dan import sqlContext.implicits._juga memberi Anda banyak fungsi yang bagus.
David Griffin

4
@Vedom: Menunjukkan kesalahan sintaks: df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntaxpada simbol $
kaks

@kaks, perlu mengimpor fungsi / implisit seperti yang dijelaskan di atas untuk menghindari kesalahan itu
Rimer

41

Hanya PySpark

Saya menemukan posting ini ketika ingin melakukan hal yang sama di PySpark. Cara termudah adalah dengan menambahkan parameter ascending = False:

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

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


8
Pertanyaannya ditandai dengan tag scala, tetapi jawaban ini hanya untuk python karena sintaks ini serta tanda tangan fungsi adalah python-only.
Viacheslav Rodionov

1
Terima kasih! Sedang mencari versi PySpark.
arrkaye

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

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

1
Ini adalah jawaban rangkap dari yang 3 tahun sebelumnya oleh @AmitDubey. harus dihapus demi yang itu.
javadba


2

Dalam kasus Jawa:

Jika kami menggunakan DataFrames, saat menerapkan gabungan (di sini Gabungan dalam), kami dapat mengurutkan (dalam ASC) setelah memilih elemen berbeda di setiap DF sebagai:

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

di mana e_idkolom tempat bergabung diterapkan sambil diurutkan berdasarkan gaji di ASC.

Kita juga dapat menggunakan Spark SQL sebagai:

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

dimana

  • percikan -> Percikan
  • gaji -> Tampilan GlobalTemp.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.