开始使用免费开始使用

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() 方法。要选择多列,您可以传入多个字符串。

请记住,名为 sparkSparkSession 已在您的工作区中,同时还有 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 ____")
编辑并运行代码