การเลือกข้อมูล II
เช่นเดียวกับ SQL คุณสามารถใช้เมธอด .select() เพื่อดำเนินการกับคอลัมน์ได้ด้วย เมื่อเลือกคอลัมน์โดยใช้รูปแบบ df.colName จะสามารถทำการคำนวณใดก็ได้กับคอลัมน์นั้น และ .select() จะคืนค่าคอลัมน์ที่ผ่านการแปลงแล้ว ตัวอย่างเช่น
flights.select(flights.air_time/60)
จะคืนค่าคอลัมน์ระยะเวลาของเที่ยวบินในหน่วยชั่วโมงแทนนาที นอกจากนี้ยังสามารถใช้เมธอด .alias() เพื่อเปลี่ยนชื่อคอลัมน์ที่กำลังเลือกได้ด้วย เช่น หากต้องการ .select() คอลัมน์ duration_hrs (ซึ่งไม่มีอยู่ใน DataFrame) ก็สามารถทำได้ดังนี้
flights.select((flights.air_time/60).alias("duration_hrs"))
เมธอด .selectExpr() ของ Spark DataFrame ที่ใช้งานเทียบเท่ากันนี้ รับนิพจน์ SQL ในรูปแบบสตริง:
flights.selectExpr("air_time/60 as duration_hrs")
โดยคีย์เวิร์ด as ใน SQL มีความหมายเทียบเท่ากับเมธอด .alias() และหากต้องการเลือกหลายคอลัมน์ก็สามารถส่งสตริงหลายค่าได้
อย่าลืมว่า SparkSession ชื่อ spark พร้อมใช้งานอยู่แล้วใน workspace รวมถึง Spark DataFrame flights ด้วย
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
พื้นฐาน PySpark
คำแนะนำการฝึกหัด
สร้างตารางแสดงความเร็วเฉลี่ยของแต่ละเที่ยวบินทั้งสองแบบ
- คำนวณความเร็วเฉลี่ยโดยหาร
distanceด้วยair_time(แปลงให้เป็นชั่วโมงก่อน) จากนั้นใช้เมธอด.alias()ตั้งชื่อคอลัมน์นี้ว่า"avg_speed"และบันทึกผลลัพธ์ไว้ในตัวแปรavg_speed - เลือกคอลัมน์
"origin","dest","tailnum"และavg_speed(ไม่ต้องใส่เครื่องหมายคำพูด!) แล้วบันทึกไว้เป็นspeed1 - สร้างตารางเดียวกันโดยใช้
.selectExpr()และสตริงที่มีนิพจน์ SQL แล้วบันทึกไว้เป็นspeed2
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Define avg_speed
avg_speed = (flights.____/(flights.____/60)).alias("____")
# Select the correct columns
speed1 = flights.select("origin", "dest", "tailnum", avg_speed)
# Create the same table using a SQL expression
speed2 = flights.selectExpr("____", "____", "____", "distance/(air_time/60) as ____")