เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

แปลง 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()
แก้ไขและรันโค้ด