Как получить СЧЕТ писем для каждого идентификатора в Scala - PullRequest
3 голосов
/ 10 мая 2019

Я использую этот запрос в SQL, чтобы узнать, сколько user_id имеют более одного электронного письма.Как бы я написал этот же запрос к пользователям DataFrame в Scala?также как я смогу вернуться к точным адресам электронной почты для каждого user_id

SELECT DISTINCT user_id
FROM Users
Group by user_id
Having count(DISTINCT email) > 1

1 Ответ

3 голосов
/ 10 мая 2019

Давайте предположим, что у вас есть датафрейм пользователей. В spark можно создать образец такого фрейма данных, например:

import spark.implicits._
val df = Seq(("me", "contact@me.com"),
             ("me", "me@company.com"),
             ("you", "you@company.com")).toDF("user_id", "email")
df.show()

+-------+---------------+
|user_id|          email|
+-------+---------------+
|     me| contact@me.com|
|     me| me@company.com|
|    you|you@company.com|
+-------+---------------+ 

Теперь логика будет очень похожа на ту, что есть в SQL:

df.groupBy("user_id")
  .agg(countDistinct("email") as "count")
  .where('count > 1)
  .show()

+-------+-----+
|user_id|count|
+-------+-----+
|     me|    2|
+-------+-----+

Затем вы можете добавить .drop("count") или .select("user_id"), чтобы сохранить только пользователей.

Обратите внимание, что в искре нет having предложения . После того, как вы вызвали agg для агрегации вашего фрейма данных по пользователю, у вас есть обычный фрейм данных, на котором вы можете вызвать любую функцию преобразования, например, фильтр для столбца count.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...