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}
谢谢。请你把答案贴出来,我可以选择吗?