Làm cách nào để sắp xếp theo cột theo thứ tự giảm dần trong Spark SQL?


137

Tôi đã thử df.orderBy("col1").show(10)nhưng nó sắp xếp theo thứ tự tăng dần. df.sort("col1").show(10)cũng sắp xếp theo thứ tự giảm dần. Tôi đã xem trên stackoverflow và các câu trả lời tôi tìm thấy đều lỗi thời hoặc được đề cập đến RDD . Tôi muốn sử dụng dataframe gốc trong spark.


2
Anh ta có nghĩa là "df.sort (" col1 "). Show (10) cũng sắp xếp theo thứ tự tăng dần "
Josiah Yoder

Giải pháp này hoạt động hoàn hảo với tôi: stackoverflow.com/a/38575271/5957143
abc123

Câu trả lời:


214

Bạn cũng có thể sắp xếp cột bằng cách nhập các hàm spark sql

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

Hoặc là

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

nhập sqlContext.implicits._

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

Hoặc là

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

ngoài ra khi bạn đặt hàng tăng dần theo tất cả các cột, asctừ khóa là không cần thiết : ..orderBy("col1", "col2").
Dan

91

Đó là org.apache.spark.sql.DataFramecho sortphương pháp:

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

Lưu ý $.descbên trong sortcho cột để sắp xếp kết quả theo.


5
import org.apache.spark.sql.functions._import sqlContext.implicits._cũng giúp bạn có rất nhiều chức năng tốt đẹp.
David Griffin

4
@Vedom: Hiển thị lỗi cú pháp: df.sort($"Time1", $"Time2".desc) SyntaxError: invalid syntaxtại ký hiệu $
kaks

@kaks, cần nhập chức năng / ẩn ý như được mô tả ở trên để tránh lỗi đó
Rimer

41

Chỉ PySpark

Tôi đã xem qua bài đăng này khi muốn làm điều tương tự trong PySpark. Cách dễ nhất là chỉ cần thêm tham số tăng dần = Sai:

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

Tham khảo: http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.DataFrame.orderBy


8
Câu hỏi được đánh dấu bằng thẻ scala, nhưng câu trả lời này chỉ dành cho python vì cú pháp này cũng như chữ ký hàm chỉ dành cho python.
Viacheslav Rodionov

1
Cảm ơn! Đã tìm kiếm phiên bản PySpark.
Arraykaye

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

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

1
Đây là một câu trả lời trùng lặp từ câu trả lời 3 năm trước của @AmitDubey. nên được loại bỏ có lợi cho cái đó
javadba


2

Trong trường hợp của Java:

Nếu chúng ta sử dụng DataFrames, trong khi áp dụng các phép nối (ở đây là phép nối trong), chúng ta có thể sắp xếp (theo ASC) sau khi chọn các phần tử riêng biệt trong mỗi DF như:

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

nơi e_idlà cột mà tham gia được áp dụng khi được sắp xếp theo mức lương trong ASC.

Ngoài ra, chúng ta có thể sử dụng Spark SQL như:

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

Ở đâu

  • tia lửa -> SparkSession
  • lương -> Chế độ xem toàn cầu.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.