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.

Vedom
sumber
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)
Pembual
sumber
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.

Vedom
sumber
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

Nic Scozzaro
sumber
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"))
Nitya Yekkirala
sumber
1
Ini adalah jawaban rangkap dari yang 3 tahun sebelumnya oleh @AmitDubey. harus dihapus demi yang itu.
javadba
7
df.sort($"ColumnName".desc).show()
Nilesh Shinde
sumber
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.
RPaul
sumber