Selecting II
Tương tự SQL, bạn cũng có thể dùng phương thức .select() để thực hiện các phép toán theo cột. Khi chọn một cột bằng ký pháp df.colName, bạn có thể thực hiện bất kỳ phép toán nào trên cột đó và phương thức .select() sẽ trả về cột đã được biến đổi. Ví dụ,
flights.select(flights.air_time/60)
trả về một cột thời lượng chuyến bay tính theo giờ thay vì phút. Bạn cũng có thể dùng phương thức .alias() để đổi tên cột bạn đang chọn. Vì vậy, nếu bạn muốn .select() cột duration_hrs (cột này không có trong DataFrame của bạn) bạn có thể làm
flights.select((flights.air_time/60).alias("duration_hrs"))
Phương thức tương đương của Spark DataFrame là .selectExpr() nhận các biểu thức SQL dưới dạng chuỗi:
flights.selectExpr("air_time/60 as duration_hrs")
trong đó từ khóa SQL as tương đương với phương thức .alias(). Để chọn nhiều cột, bạn có thể truyền vào nhiều chuỗi.
Lưu ý, một SparkSession tên là spark đã có sẵn trong không gian làm việc của bạn, cùng với Spark DataFrame flights.
Bài tập này là một phần của khóa học
Nền tảng về PySpark
Hướng dẫn bài tập
Tạo một bảng về vận tốc trung bình của mỗi chuyến bay theo cả hai cách.
- Tính vận tốc trung bình bằng cách lấy
distancechia choair_time(đổi sang giờ). Dùng phương thức.alias()để đặt tên cột này là"avg_speed". Lưu kết quả vào biếnavg_speed. - Chọn các cột
"origin", "dest", "tailnum"vàavg_speed(không có dấu ngoặc kép!). Lưu vàospeed1. - Tạo cùng một bảng bằng
.selectExpr()với một chuỗi chứa biểu thức SQL. Lưu vàospeed2.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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 ____")