访问Scala对象的成员

时间:2015-08-13 17:16:16

标签: scala apache-spark

我调用了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

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