Применение интерфейса в DataFrame - PullRequest
0 голосов
/ 15 ноября 2018

Я новичок в Spark, и мне было интересно, возможно ли следующее:

У меня есть 2 Datasets, и у них обоих есть поля EventTime и UserId.Однако они отличаются во всех других столбцах.

Я хочу написать функцию, которая принимает эти Datasets и выплевывает в последний раз, когда я видел каждого пользователя.

Это достаточно просто,потому что мы можем выбрать строку с максимальным временем для каждого пользователя (groupby)

Допустим, у меня есть функция LastSeenTime(events: DataFrame): DataFrame { ... }

Мой вопрос: как бы вы организовали код, ипотенциально определить тип / интерфейс так, чтобы LastSeenTime мог обеспечить, чтобы events имел столбцы UserId и EventTime, необходимые для обработки.

Может ли схема набора данных соответствовать частичным интерфейсам?

Спасибо!

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете сделать что-то вроде этого:

sealed trait Event {
  def userId: String
  def eventTime: String
}

final case class UserEvent(userId: String, eventTime: String, otherField: String) extends Event

def lastTimeByUser[E <: Event, T](events: Dataset[E]): Dataset[T] = ???

Редактировать

Если вы используете Dataframe, вы можете "привести" кDataset[T] с использованием .as[T] метода . (где T - это класс , который вы хотите использовать для представления ваших данных - должны иметь те же поля, что и ваши Rows) .
Примечание. Вам понадобится неявное Encoder[T] в области для этого - самый простой способ предоставить это import spark.implicits._, где spark - это экземпляр SparkSession.

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