我有一个起源RDD:
var userNodesRdd = usersGraph.vertices.asInstanceOf[RDD[(VertexId,(VertexId, String, String))]]
userNodesRdd.foreach(println) // check
/* I see:
* (533,[533,fobi,m])
* (610,[610,pablo,m])
* (627,[627,marco,m])
* (571,[571,anna,f])
* (590,[590,luca,m])
*
我想从中获取一个只包含验证条件的元素的RDD(只有具有此方面( _ , [ _ , _ , m]) )
的人。
为了这个目标,我使用了这个:
var maleUserNodesRdd = userNodesRdd.filter{
case (_,(_,_,gender)) => gender == "m"
}
maleUserNodesRdd.foreach(println)
但我得到了:
Caused by: java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema cannot be cast to scala.Tuple3
为什么?
答案 0 :(得分:1)
您的代码中的值为Row
个对象,而不是Tuple3
,因此您应该在模式中使用Row
:
import org.apache.spark.sql.Row
val maleUserNodesRdd = userNodesRdd.filter{
case (_, Row(_, _, gender)) => gender == "m"
}
同时:
asInstanceOf[RDD[(VertexId,(VertexId, String, String))]]
无效只是保持
var userNodesRdd = usersGraph.vertices