对同一列做两次聚合
有些情况下,点号语法不如 SQL 来得简洁。本练习要为每条列车线路计算首班和末班时间。下面的代码使用点号语法完成了这一点。
from pyspark.sql.functions import min, max, col
expr = [min(col("time")).alias('start'), max(col("time")).alias('end')]
dot_df = df.groupBy("train_id").agg(*expr)
dot_df.show()
+--------+-----+-----+
|train_id|start| end|
+--------+-----+-----+
| 217|6:06a|6:59a|
| 324|7:59a|9:05a|
+--------+-----+-----+
您的目标是使用一条 SQL 查询得到与上述代码相同的结果。数据帧 df 已注册为名为 schedule 的表。
本练习是课程的一部分
Python 中的 Spark SQL 入门
练习说明
- 编写一条 SQL 查询,使其结果与点号语法查询完全一致。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Write a SQL query giving a result identical to dot_df
query = "SELECT ____ FROM schedule ____ ____ ____"
sql_df = spark.sql(query)
sql_df.show()