การรวมค่าทีละขั้น
การเลือกใช้ dot notation หรือ SQL ขึ้นอยู่กับความถนัดส่วนตัว อย่างไรก็ตาม อย่างที่เห็นในวิดีโอ SQL มักให้ผลที่กระชับกว่าในบางกรณี และในทางกลับกัน dot notation ก็อาจให้ผลลัพธ์ที่ไม่ตรงกับที่คาดไว้ เช่น เมื่อทำการรวมค่าครั้งที่สองบนคอลัมน์เดิม ผลจะทับค่าที่รวมไว้ก่อนหน้า ดังที่กล่าวถึงในวิดีโอ ไวยากรณ์พื้นฐานของ agg ใน PySpark สามารถทำการรวมค่าได้เพียงครั้งเดียวต่อคอลัมน์ในแต่ละครั้ง
แบบฝึกหัดต่อไปนี้จะคำนวณเวลาออกเดินทางครั้งแรกของแต่ละสายรถไฟ
ผลลัพธ์สองชุดแรกตรงกัน แต่สองชุดหลังไม่ตรงกัน ลองคิดดูว่าเพราะเหตุใด
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Introduction to Spark SQL in Python
คำแนะนำการฝึกหัด
- เติมช่องว่างเพื่อให้คำสั่งคู่แรกแสดงผลลัพธ์ที่เหมือนกัน
- ผลลัพธ์ชุดที่สี่ ซึ่งมีชื่อว่า
resultเป็นความพยายามที่ตรงไปตรงมาในการจำลองบรรทัดก่อนหน้า แต่กลับให้ผลลัพธ์ที่แตกต่างออกไปอย่างน่าประหลาดใจ เป็นเพราะอะไร? เติมช่องว่างเพื่อพิมพ์ชื่อของคอลัมน์ที่สองของresult
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Give the identical result in each command
spark.sql('SELECT train_id, MIN(time) AS start FROM schedule GROUP BY train_id').show()
df.groupBy('____').agg({'time':'____'}).withColumnRenamed('____', 'start').show()
# Print the second column of the result
spark.sql('SELECT train_id, MIN(time), MAX(time) FROM schedule GROUP BY train_id').show()
result = df.groupBy('train_id').agg({'time':'min', 'time':'max'})
result.show()
print(result.columns[____])