Spark SQL'de azalan sırayla sütuna göre nasıl sıralama yapılır?


137

Denedim df.orderBy("col1").show(10)ama artan sırada sıralandı. df.sort("col1").show(10)ayrıca azalan sırada sıralar. Stackoverflow'a baktım ve bulduğum cevapların hepsi eski veya RDD'lere atıfta bulundu . Kıvılcımda yerel veri çerçevesini kullanmak istiyorum.


2
"Df.sort (" col1 ") anlamına geliyor. Show (10) ayrıca artan düzende sıralıyor "
Josiah Yoder

Bu çözüm benim için mükemmel çalıştı: stackoverflow.com/a/38575271/5957143
abc123

Yanıtlar:


214

Ayrıca spark sql işlevlerini içe aktararak da sütunu sıralayabilirsiniz.

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

Veya

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

sqlContext.implicits._ içe aktarılıyor

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

Veya

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

Eğer tüm sütunlarla artan sipariş ederken aynı zamanda, ascanahtar kelime gerekli değildir: ..orderBy("col1", "col2").
Dan

91

Bu öyle org.apache.spark.sql.DataFrameiçin sortyöntemiyle:

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

Not $ve .descsortsütun için Sonuçları sıralamak için.


5
import org.apache.spark.sql.functions._ve import sqlContext.implicits._ayrıca size birçok güzel işlevsellik kazandırır.
David Griffin

4
@Vedom: Bir sözdizimi hatası gösterir: df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntax$ sembolünde
kaks

@kaks, bu hatayı önlemek için yukarıda açıklanan işlevleri / uygulamaları içe aktarmanız gerekiyor
Rimer

41

Yalnızca PySpark

Aynısını PySpark'ta yapmak istediğimde bu yazıya rastladım. En kolay yol, sadece artan = False parametresini eklemektir:

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

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


8
Soru bir scala etiketiyle işaretlenmiştir, ancak bu yanıt yalnızca python içindir, çünkü bu sözdizimi ve bir işlev imzası yalnızca python içindir.
Viacheslav Rodionov

1
Teşekkürler! PySpark versiyonunu arıyordu.
arrkaye

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

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

1
Bu, 3 yıl önce @AmitDubey tarafından verilen bir cevaptır. bunun lehine kaldırılmalıdır.
javadba


2

Java söz konusu olduğunda:

DataFramesBirleşimleri uygularken kullanırsak (burada İç birleşim), her DF'de farklı öğeleri seçtikten sonra şu şekilde sıralayabiliriz (ASC'de):

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

nerede e_idASC'de maaşa göre sıralanırken birleştirmenin uygulandığı sütun .

Ayrıca Spark SQL'i şu şekilde kullanabiliriz:

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

nerede

  • spark -> SparkSession
  • maaş -> GlobalTemp Görünümü.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.