Как показать всем пользователям, которые в сумме имеют 50 процентов в spark scala (sql)? - PullRequest
0 голосов
/ 12 октября 2019

Допустим, у меня есть данные - клики (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

1 Ответ

2 голосов
/ 13 октября 2019

Сначала подытожим количество кликов. Затем рассчитайте процент и, наконец, отфильтруйте для всех строк больше 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|
+-----+-----------+--------+
...