簡體   English   中英

在Scala中過濾RDD [(VertexId,(VertexId,String,String))]

[英]Filter RDD[(VertexId,(VertexId, String, String))] in Scala

我有一個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

為什么?

代碼中的值是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM