Я не уверен, когда использовать метод Rdd.get - PullRequest
0 голосов
/ 26 апреля 2019

У меня проблема с пониманием того, как метод get работает в rdd

Может кто-нибудь помочь мне узнать, почему это различие? Ниже у меня есть кусок кода

Я не уверен, почему для доступа к какому-либо значению из userActivity мы используем метод getod (например, -> e._2._2.get.activityTypeId), но для доступа к любому значению из userRdd мы не используем это (например, -> e._2._1.userName)

val LoginActivityTypeId = 0
val LogoutActivityTypeId = 1
case class User(userId: Long, userName: String)

case class UserActivity(userId: Long, activityTypeId: Int, timestampEpochSec: Long)


val userRdd = spark.sparkContext.parallelize(Array(
  User(1, "Doe, John"),
  User(2, "Doe, Jane"),
  User(3, "X, Mr.")
))
  .map(e => (e.userId, e))

val userActivity = spark.sparkContext.parallelize(Array(
  UserActivity(1, LoginActivityTypeId, 1514764800L),
  UserActivity(2, LoginActivityTypeId, 1514808000L),
  UserActivity(1, LogoutActivityTypeId, 1514829600L),
  UserActivity(1, LoginActivityTypeId, 1514894400L)
))
  .map(e => (e.userId, e))

val result = userRdd
  .leftOuterJoin(userActivity)

val s = result.filter(e => e._2._2.isDefined && e._2._2.get.activityTypeId == LoginActivityTypeId)
  .map(e => (e._2._1.userName, e._2._2.get.timestampEpochSec))
  .reduceByKey((a, b) => if (a < b) a else b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...