Spark中如何从对象元组数组访问VertexAttributes对象成员?
访问VertexAttributes对象成员的方法
嘿,这事儿其实很简单!你过滤后得到的res94是一个Array[(VertexId, VertexAttributes)]——说白了就是一堆元组,每个元组里第一个元素是顶点ID,第二个就是你定义的VertexAttributes对象。要访问它的成员,直接针对元组里的第二个元素操作就行,给你几种常用的方式:
方式1:遍历整个过滤结果数组
如果你的过滤结果可能有多个顶点,用遍历的方式逐个处理最稳妥:
// 先把过滤结果存成变量方便操作 val filteredVertices = res92.filter{case(k,m) => k == 964088677}.collect // 遍历每个元组,用模式匹配直接取出顶点ID和属性对象 filteredVertices.foreach { case (vertexId, attrs) => // 直接通过属性对象点出成员变量 println(s"顶点ID:$vertexId") println(s"rootParentCustNumber值:${attrs.rootParentCustNumber}") println(s"firstMsgFlg值:${attrs.firstMsgFlg}") }
方式2:直接取单个结果(如果确定只有一个匹配项)
如果你知道过滤后只会有一个顶点符合条件,可以直接取数组的第一个元素:
val (targetId, targetAttrs) = filteredVertices.head // 访问成员 println(targetAttrs.rootParentCustNumber) println(targetAttrs.firstMsgFlg)
⚠️ 小提醒:如果数组为空的话,head会抛出异常,更安全的做法是用headOption:
filteredVertices.headOption.foreach { case (id, attrs) => println(attrs.rootParentCustNumber) }
原理说明
你的VertexAttributes类里定义的rootParentCustNumber和firstMsgFlg都是公共的val成员,所以只要拿到这个类的实例(也就是元组里的第二个元素),就可以直接用.来访问这些成员变量啦。
内容的提问来源于stack exchange,提问作者Haris Irshad
相关产品推荐
相关产品推荐

