Selecting 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"))
等价的 Spark DataFrame 方法 .selectExpr() 接收 SQL 表达式字符串:
flights.selectExpr("air_time/60 as duration_hrs")
其中 SQL 的 as 关键字等价于 .alias() 方法。要选择多列,您可以传入多个字符串。
请记住,名为 spark 的 SparkSession 已在您的工作区中,同时还有 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 ____")