Выберите строки из фрейма данных, проверив значение другого столбца - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть датафрейм, как показано ниже:

+--------+----------------+----+----------+
|role_num|   email_address|role|counters  |
+--------+----------------+----+----------+
|     110| EMAIL2@TEST.COM|null|         2|
|     110| EMAIL2@TEST.COM| P  |         2|
|     114|EMAIL10@TEST.COM| A  |         2|
|     114|EMAIL10@TEST.COM|null|         2|
+--------+----------------+----+----------+

Из этого фрейма данных мой вывод должен выглядеть примерно так:

+--------+----------------+----+----------+
|role_num|   email_address|role|counters  |
+--------+----------------+----+----------+
|     110| EMAIL2@TEST.COM| P  |         2|
|     114|EMAIL10@TEST.COM| A  |         2|
+--------+----------------+----+----------+

Условие: всякий раз, когда количество дубликатов равно 2, тогдаЯ должен выбрать роль «P», но если этой роли нет, мне нужно выбрать «A».

Я пробовал, как показано ниже.Но это не похоже на работу.

import sc.implicits._

val targetDF = Seq(
      ("110", "EMAIL2@TEST.COM", "", "2"),
      ("110", "EMAIL2@TEST.COM", "PAH", "2"),
      ("114", "EMAIL10@TEST.COM", "AAH", "2"),
      ("114", "EMAIL10@TEST.COM", "", "2")
      )
      .toDF(
        "role_num",
        "email_address",
        "role",
        "counters")

targetDF.where(
        (col("counters") > 1 )
           || ?)

Вы можете помочь?

1 Ответ

2 голосов
/ 04 апреля 2019

Это решение будет работать с вашими текущими ролями:

targetDF
      .withColumn("priority", rank().over(Window.partitionBy("acct_num").orderBy(desc_nulls_last("role"))))
      .where(col("priority") === 1)
      .drop("priority")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...