การกรองข้อมูล
เมื่อมีพื้นฐาน SQL มาบ้างแล้ว การอธิบายการดำเนินการที่คล้ายกันบน Spark DataFrame ก็จะง่ายขึ้นมาก
มาดูเมธอด .filter() กัน เมธอดนี้คือตัวแทนของ SQL WHERE clause ใน Spark โดย .filter() รับได้ทั้งนิพจน์แบบสตริงที่ใช้ต่อท้าย WHERE ใน SQL หรือ Spark Column ที่มีค่าบูลีน (True/False)
ตัวอย่างเช่น สองนิพจน์ต่อไปนี้ให้ผลลัพธ์เหมือนกัน:
flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()
ในกรณีแรก เราส่ง สตริง ให้ .filter() ซึ่งถ้าเขียนเป็น SQL จะได้ว่า SELECT * FROM flights WHERE air_time > 120 เมธอด .filter() ของ Spark รับนิพจน์ใดก็ได้ที่สามารถใช้ใน WHERE clause ของ SQL (ในที่นี้คือ "air_time > 120") โดยต้องส่งเป็นสตริง
สังเกตว่าในกรณีนี้ ไม่จำเป็นต้องระบุชื่อตารางในสตริง เช่นเดียวกับที่ไม่ระบุใน SQL
ในกรณีที่สอง เราส่ง คอลัมน์ที่มีค่าบูลีน ให้ .filter() โดย flights.air_time > 120 จะคืนค่าเป็นคอลัมน์บูลีนที่มีค่า True สำหรับแถวใน flights.air_time ที่มีค่ามากกว่า 120 และ False สำหรับแถวที่เหลือ
ทั้งนี้ SparkSession ชื่อ spark และ Spark DataFrame ชื่อ flights พร้อมใช้งานใน workspace แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
พื้นฐาน PySpark
คำแนะนำการฝึกหัด
- ใช้เมธอด
.filter()เพื่อค้นหาเที่ยวบินที่บินระยะทางเกิน 1,000 ไมล์ โดยทำสองวิธี:- วิธีแรก ส่ง สตริง SQL ให้
.filter()เพื่อตรวจสอบว่า distance มากกว่า 1,000 หรือไม่ แล้วบันทึกผลลัพธ์เป็นlong_flights1 - วิธีที่สอง ส่งคอลัมน์บูลีนให้
.filter()เพื่อตรวจสอบเงื่อนไขเดียวกัน แล้วบันทึกผลลัพธ์เป็นlong_flights2
- วิธีแรก ส่ง สตริง SQL ให้
- ใช้
.show()เพื่อแสดงข้อมูลส่วนหัวของทั้งสอง DataFrame และตรวจสอบว่าผลลัพธ์เหมือนกัน
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Filter flights by passing a string
long_flights1 = ____.____("____ > ____")
# Filter flights by passing a column of boolean values
long_flights2 = ____.____(____.____ > ____)
# Print the data to check they're equal
____.____()
____.____()