获取分组列的计数
Posted
技术标签:
【中文标题】获取分组列的计数【英文标题】:Getting count of grouped columns 【发布时间】:2019-05-06 18:02:07 【问题描述】:我有一个包含 3 个网络的数据框,每个网络都有很多站。我想做的是获取每个网络的站点总数。数据框仍应包含网络和站点名称,因此应如下所示:
Network Station Total
XMN DIS 3
XMN CNN 3
XMN JFK 3
ALK DIS 2
ALK CNN 2
我该怎么做呢?我假设我需要按列分组,然后使用窗口函数按网络和站分区以获得总数?我不确定,但我该怎么做呢?
【问题讨论】:
Adding a group count column to a PySpark dataframe 可能重复。 【参考方案1】:Window.partitionBy
正是这样做的:
df = spark_session.createDataFrame([
Row(Network='XMN', Station='DIS'),
Row(Network='XMN', Station='CNN'),
Row(Network='XMN', Station='JFK'),
Row(Network='ALK', Station='DIS'),
Row(Network='ALK', Station='CNN')
])
df.select("Network", "Station", count("*").over(Window.partitionBy("Network")).alias("Total")).show()
输出:
.+-------+-------+-----+
|Network|Station|Total|
+-------+-------+-----+
| XMN| DIS| 3|
| XMN| CNN| 3|
| XMN| JFK| 3|
| ALK| DIS| 2|
| ALK| CNN| 2|
+-------+-------+-----+
【讨论】:
【参考方案2】:您需要分组,获取计数并加入原始数据框
scala> val df = Seq(("XMN", "DIS"), ("XMN", "CNN"), ("XMN", "JFK"), ("ALK", "DIS"), ("ALK", "CNN")).toDF("Network", "Station")
df: org.apache.spark.sql.DataFrame = [Network: string, Station: string]
scala> df.show
+-------+-------+
|Network|Station|
+-------+-------+
| XMN| DIS|
| XMN| CNN|
| XMN| JFK|
| ALK| DIS|
| ALK| CNN|
+-------+-------+
scala> val grpCountDF = df.groupBy("Network").count
grpCountDF: org.apache.spark.sql.DataFrame = [Network: string, count: bigint]
scala> grpCountDF.show
+-------+-----+
|Network|count|
+-------+-----+
| XMN| 3|
| ALK| 2|
+-------+-----+
scala> val outputDF = df.join(grpCountDF, "Network")
outputDF: org.apache.spark.sql.DataFrame = [Network: string, Station: string ... 1 more field]
scala> outputDF.show
+-------+-------+-----+
|Network|Station|count|
+-------+-------+-----+
| XMN| DIS| 3|
| XMN| CNN| 3|
| XMN| JFK| 3|
| ALK| DIS| 2|
| ALK| CNN| 2|
+-------+-------+-----+
【讨论】:
以上是关于获取分组列的计数的主要内容,如果未能解决你的问题,请参考以下文章
SQL语句汇总(三)——聚合函数分组子查询及组合查询 - Darly
如何在 sql server 2008 的同一张表中使用计数和分组方式和自连接?
pandas使用groupby函数agg函数获取每个分组聚合对应的均值(mean)实战:计算分组聚合单数据列的均值计算分组聚合多数据列的均值
pandas使用groupby函数agg函数获取每个分组聚合对应的标准差(std)实战:计算分组聚合单数据列的标准差(std)计算分组聚合多数据列的标准差(std)