У меня проблема с пониманием того, как метод 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)