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
dfvớidf.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
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()