逐步进行聚合
使用点号调用语法还是 SQL,多数情况下取决于个人偏好。不过,正如视频练习所示,有些场景用 SQL 更简单。视频课中也演示了点号语法会出现不符合直觉的结果,例如当对同一列进行第二次聚合时,会覆盖之前对该列的聚合。视频中提到,pyspark 中 agg 的基本语法一次只能对每一列执行一个聚合。
下面的练习要计算每条列车线路的首次发车时间。
前两条查询的结果一致。然而,后两条并不一致。您能找出原因吗?
本练习是课程的一部分
Python 中的 Spark SQL 入门
练习说明
- 填空,使第一对命令输出完全相同的结果。
- 第四个结果命名为
result,它是对上一行的一个天真实现尝试。但它的结果与直觉不同。哪里不同?请填空,打印result的第二列列名。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Give the identical result in each command
spark.sql('SELECT train_id, MIN(time) AS start FROM schedule GROUP BY train_id').show()
df.groupBy('____').agg({'time':'____'}).withColumnRenamed('____', 'start').show()
# Print the second column of the result
spark.sql('SELECT train_id, MIN(time), MAX(time) FROM schedule GROUP BY train_id').show()
result = df.groupBy('train_id').agg({'time':'min', 'time':'max'})
result.show()
print(result.columns[____])