apache-spark - 使用 Pyspark 聚合两列
问题描述
通过 PySpark 学习 Apache Spark 并遇到问题。
我有以下DF:
+----------+------------+-----------+----------------+
| game_id|posteam_type|total_plays|total_touchdowns|
+----------+------------+-----------+----------------+
|2009092003| home| 90| 3|
|2010091912| home| 95| 0|
|2010112106| home| 75| 0|
|2010121213| home| 85| 3|
|2009092011| null| 9| null|
|2010110703| null| 2| null|
|2010112111| null| 6| null|
|2011100909| home| 102| 3|
|2011120800| home| 72| 2|
|2012010110| home| 74| 6|
|2012110410| home| 68| 1|
|2012120911| away| 91| 2|
|2011103008| null| 6| null|
|2012111100| null| 3| null|
|2013092212| home| 86| 6|
|2013112407| home| 73| 4|
|2013120106| home| 99| 3|
|2014090705| home| 94| 3|
|2014101203| home| 77| 4|
|2014102611| home| 107| 6|
+----------+------------+-----------+----------------+
我试图找到得分 TD 或 sum(total_plays)/sum(total_touchdowns) 所需的平均播放次数。
我想出了获得总和的代码,但无法弄清楚如何获得总平均值:
plays = nfl_game_play.groupBy().agg({'total_plays': 'sum'}).collect()
touchdowns = nfl_game_play.groupBy().agg({'total_touchdowns',: 'sum'}).collect()
如您所见,我尝试将每个值存储为变量,但不仅仅是记住每个值是什么并手动执行它。
解决方案
试试下面的代码:
Example:
df.show()
#+-----------+----------------+
#|total_plays|total_touchdowns|
#+-----------+----------------+
#| 90| 3|
#| 95| 0|
#| 9| null|
#+-----------+----------------+
from pyspark.sql.functions import *
total_avg=df.groupBy().agg(sum("total_plays")/sum("total_touchdowns")).collect()[0][0]
#64.66666666666667
推荐阅读
- python - 用户操作后,django 不返回任何内容/返回完全相同的位置
- cuda - MIO 油门失速何时发生?
- kubernetes - Helm 3 的 Kubernetes 权限安装到特定命名空间
- haskell - Raku 中的类似 Haskell 的模式匹配
- haskell - 无法推断(浮动 a)因使用“pi”而产生
- javascript - 迭代 Firebase 存储 URL 时如何在 React 中使用 Async 和 Await
- web-services - 从 Xamarin Forms 调用 asmx Web 服务
- reactjs - 输入 URL 时反应路由器路径不会改变
- bash - jenkinsfile if 语句不使用通配符语句
- excel - 获取具有最大值的列的名称,但行不相关