แปลง Window function จาก dot notation เป็น SQL
เราจะเพิ่มคอลัมน์ลงในตารางเวลาของรถไฟ เพื่อให้แต่ละแถวแสดงจำนวนนาทีที่รถไฟใช้ในการไปถึงสถานีถัดไป
- มี dataframe
dfโดยที่df.columns == ['train_id', 'station', 'time'] dfถูกลงทะเบียนเป็นตาราง SQL ชื่อschedule- คิวรี Window function ด้านล่างใช้ dot notation และได้ dataframe ใหม่ชื่อ
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)
สังเกตการใช้ฟังก์ชัน unix_timestamp ซึ่งเทียบเท่ากับฟังก์ชัน SQL UNIX_TIMESTAMP
โปรดใส่ใจโครงสร้าง (scaffolding) ในโค้ดตัวอย่าง การจัดรูปแบบคำตอบให้ตรงกับโครงสร้างนี้จะช่วยให้คำตอบที่ส่งไม่ถูกปฏิเสธโดยไม่จำเป็นเนื่องจากปัญหาการจัดรูปแบบ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Introduction to Spark SQL in Python
คำแนะนำการฝึกหัด
- สร้างคิวรี SQL เพื่อให้ได้ผลลัพธ์เหมือนกับ
dot_dfทุกประการ โดยจัดรูปแบบคิวรีตามโครงสร้างที่กำหนด (คือ ช่องว่าง_____ที่เป็น placeholder)
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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()