Scala 如何访问对象';从对象元组数组中删除成员

Scala 如何访问对象';从对象元组数组中删除成员,scala,apache-spark,tuples,Scala,Apache Spark,Tuples,对象类是 class VertexAttributes(val m: Boolean, n: Any){ val rootParentCustNumber: String = if(n == null) "Was Null" else n.toString val firstMsgFlg = m } 我有一个此对象类型的RDD: scala> myGraph.vertices res92: org.apache.spark.graphx.VertexR

对象类是

class VertexAttributes(val m: Boolean, n: Any){

        val rootParentCustNumber: String = if(n == null) "Was Null" else n.toString
        val firstMsgFlg = m

}
我有一个此对象类型的RDD:

scala> myGraph.vertices
res92: org.apache.spark.graphx.VertexRDD[VertexAttributes] = VertexRDDImpl[2280] at RDD at VertexRDD.scala:57
通过对RDD进行过滤,我得到以下结果:

scala> res92.filter{case(k,m) => k == 964088677}.collect
res94: Array[(org.apache.spark.graphx.VertexId, VertexAttributes)] = Array((964088677,VertexAttributes@2612b83f))
如何访问
VertexAttributes@2612b83f.rootParentCustNumber
数组中((964088677,VertexAttributes@2612b83f))

我尝试了
res92.filter{case(k,m)=>k==964088677}.map{case数组(k,m)=>m.rootParentCustNumber}

但我得到了以下错误:

<console>:243: error: pattern type is incompatible with expected type;
 found   : Array[T]
 required: (org.apache.spark.graphx.VertexId, VertexAttributes)
    (which expands to)  (Long, VertexAttributes)
       res92.filter{case(k,m) => k == 964088677}.map{case Array(k,m)=> m.rootParentCustNumber}
                                                               ^
:243:错误:模式类型与预期类型不兼容;
找到:数组[T]
必需:(org.apache.spark.graphx.VertexId,VertexAttributes)
(扩展为)(长,顶点属性)
res92.filter{case(k,m)=>k==964088677}.map{case数组(k,m)=>m.rootParentCustNumber}
^

过滤阶段不会更改RDD的类型(即
RDD[(长,顶点属性)]

因此,您可以将filter stage返回的RDD与map stage进行管道连接,并以与filter stage相同的方式处理每条记录:

res92
  .filter{ case (k, m) => k == 964088677 }
  .map{ case (k, m) => m.rootParentCustNumber }


我想你被collect阶段误导了,它将RDD转换成数组。

过滤器
阶段相同:
.map{case(k,m)=>m.rootParentCustNumber}
但是我需要先过滤以获得我想要的对象。你可以先过滤。过滤阶段不会更改RDD的类型。因此,您可以使用map stage来传递filter stage返回的RDD:
res92.filter{case(k,m)=>k==964088677}.map{case(k,m)=>m.rootParentCustNumber}
谢谢。请你把答案贴出来,我可以选择吗?