首页 > 解决方案 > 如何显示所有用户在 spark scala (sql) 中的总数为 50%?

问题描述

假设我有数据 - 点击次数 (1) 表示用户点击了显示的广告

Users | clicks
  A   |   1 
  A   |   1 
  B   |   0
  B   |   0
  C   |   1 
  C   |   0
  D   |   1
  D   |   0
  E   |   0
  E   |   0

我需要找出所有点击了 50% 展示广告的人

在我们的例子中,总点击次数 - 4 次,我需要关注输出

Users | clicks | percents
  A   |   2    |    50

标签: scalaapache-sparkapache-spark-sql

解决方案


首先,总结一下点击次数。然后计算百分比,最后过滤所有大于 50% 的行:

val df = Seq(("A", 1), ("A", 1), ("B", 0), ("B", 0), ("C", 1), ("C", 0),
        ("D", 1), ("D", 0), ("E", 0), ("E", 0))
    .toDF("Users", "clicks")
val allĆlicks = df.filter("Clicks > 0").count
df.groupBy("Users").sum()
  .withColumn("percents", $"sum(clicks)"/allĆlicks*100)
  .filter("percents >= 50")
  .show()

印刷:

+-----+-----------+--------+
|Users|sum(clicks)|percents|
+-----+-----------+--------+
|    A|          2|    50.0|
+-----+-----------+--------+

推荐阅读