Apache spark 结合窗口函数计算Spark DF列中的特定值
样本DF:Apache spark 结合窗口函数计算Spark DF列中的特定值,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,样本DF: var some_df = Seq( ("A", "no"), ("B", "yes"), ("B", "yes"), ("B", "no") ).toDF( "user_id", "phone_number") 一些_df.show() 我试图计算每个用户id的“是”数 代码: 我的作品: +-------+------+ |user_id|my_col| +-------+------+ | B| 3| | B| 3| |
var some_df = Seq(
("A", "no"),
("B", "yes"),
("B", "yes"),
("B", "no")
).toDF(
"user_id", "phone_number")
一些_df.show()
我试图计算每个用户id的“是”数
代码:
我的作品:
+-------+------+
|user_id|my_col|
+-------+------+
| B| 3|
| B| 3|
| B| 3|
| A| 1|
+-------+------+
预期OP:
User Id . my_col
B . 2
A . 0
任何关于我哪里出错的建议都将非常有用因为您正在减少数据帧,请使用
groupBy.agg
而不是窗口函数;在这里,您将phone\u number
列与yes
字符串($“phone\u number”==“yes”
)进行比较,并将结果转换为整数,该整数将true
转换为1
,将false
转换为0
,然后我们通过对列求和来计算1
s:
some_df.groupBy("user_id").agg(
sum(($"phone_number" === "yes").cast("integer")).as("my_col")
).show
+-------+------+
|user_id|my_col|
+-------+------+
| B| 2|
| A| 0|
+-------+------+
User Id . my_col
B . 2
A . 0
some_df.groupBy("user_id").agg(
sum(($"phone_number" === "yes").cast("integer")).as("my_col")
).show
+-------+------+
|user_id|my_col|
+-------+------+
| B| 2|
| A| 0|
+-------+------+