Bắt đầu ngayBắt đầu miễn phí

Chuyển window function từ dot notation sang SQL

Chúng ta sẽ thêm một cột vào lịch trình tàu để mỗi hàng cho biết số phút tàu đến điểm dừng tiếp theo.

  • Ta có một dataframe df với df.columns == ['train_id', 'station', 'time'].
  • df đã được đăng ký thành một bảng SQL tên là schedule.
  • Truy vấn window function sau đây dùng dot notation. Nó tạo ra dataframe mới dot_df.
window = Window.partitionBy('train_id').orderBy('time')
dot_df = df.withColumn('diff_min', 
                    (unix_timestamp(lead('time', 1).over(window),'H:m') 
                     - unix_timestamp('time', 'H:m'))/60)

Lưu ý cách dùng hàm unix_timestamp, tương đương với hàm SQL UNIX_TIMESTAMP.

Hãy chú ý đến khung sườn trong mã mẫu. Định dạng câu trả lời theo đúng khung sườn sẽ giúp tránh bị chấm sai do lỗi định dạng.

Bài tập này là một phần của khóa học

Nhập môn Spark SQL bằng Python

Xem khóa học

Hướng dẫn bài tập

  • Tạo một truy vấn SQL để thu được kết quả giống hệt dot_df. Hãy định dạng truy vấn theo đúng khung sườn (tức là các gạch dưới giữ chỗ _____).

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# Create a SQL query to obtain an identical result to dot_df
query = """
SELECT *, 
(____(____(time, 1) ____ (____ BY train_id ____ BY time),'H:m') 
 - ____(time, 'H:m'))/60 AS diff_min 
FROM schedule 
"""
sql_df = spark.sql(query)
sql_df.show()
Chỉnh sửa và Chạy Mã