首页 > 解决方案 > 如何通过对现有列执行一些转换来使用 withcolumn 添加列?

问题描述

我有一个带有列的简单 csv 文件(id:Integer,Name:String,Gender:String)。我想使用 withColumn 向这个数据框添加一列。我知道第一个参数是列名,但不太确定如何传递将按性别分组的第二个参数。有人可以帮我弄这个吗?

我试过使用df.withColumn("Count",df.groupby("Gender").count()),但它给出了类型不匹配错误,说它需要一个列类型但得到一个数据框。我尝试过使用col()也期望它类型转换它。

val newDf=df.withColumn("count",col(df.groupBy("Gender").count()))

我希望添加一个带有计数列的新数据框。

标签: dataframeapache-sparkapache-spark-sql

解决方案


我想这就是你要找的,window函数和count函数 的使用

import spark.implicits._

val df = Seq(
  (1, "name1", "M"),
  (2, "name2", "M"),
  (3, "name3", "M"),
  (4, "name4", "M"),
  (5, "name5", "F"),
  (6, "name6", "F"),
  (7, "name7", "M")
).toDF("id", "Name", "Gender")

val window = Window.partitionBy("Gender")

df.withColumn("count", count($"Gender").over(window))
  .show(false)

输出:

+---+-----+------+-----+
|id |Name |Gender|count|
+---+-----+------+-----+
|5  |name5|F     |2    |
|6  |name6|F     |2    |
|1  |name1|M     |5    |
|2  |name2|M     |5    |
|3  |name3|M     |5    |
|4  |name4|M     |5    |
|7  |name7|M     |5    |
+---+-----+------+-----+

推荐阅读