我调用了Spark RDD的first()方法,它返回了一个如下所示的对象:
session: Any = (SessionKey{m_sessionId=91249793986979128, m_publisherId=196, m_sessionStartTimeTimeSlice=1439164800000},Session{m_pageViewsIds=[ViewId [m_viewId=1439166315327]]})
如何访问此对象的成员变量?
当我运行session.getClass时,结果是:
Class[_] = class scala.Tuple2
然而,当我尝试使用_1和_2访问成员时,我收到以下消息:
error: value _1 is not a member of Any
session._1
当我尝试通过调用session.asInstanceOf [(SessionKey,Session)] ._ 1来强制转换它时,我得到:
error: not found: type SessionKey
session.asInstanceOf[(SessionKey, Session)]._1
error: not found: type Session
session.asInstanceOf[(SessionKey, Session)]._1
答案 0 :(得分:0)
如果你总是希望session是相同的类型,那么对这个类型进行显式转换:
val sessionWithType = session.asInstanceOf[(SessionKey, Session)]
sessionWithType._1
如果您不确定类型,请尝试匹配:
val sessionAsOption = session match {
case s:(SessionKey, Session) => Some(s)
case _ => None
}
sessionAsOption.foreach {
session => session._1
}
在后面的示例中,当会话与预期类型匹配时,您将获得Some()
,否则会None
。