graphx를 사용하여 그래프를 만들었으므로 원본 그래프에서 하위 그래프를 추출해야합니다. users_graph는 사용자에게 색인이 생성 된 하위 그래프가있는 RDD입니다. 문제는 이러한 하위 그래프가 계산되지 않는다는 것입니다. 이러한 하위 그래프를 조작하려고하면 java.lang.NullPointerException 예외가 발생합니다.graphx를 사용하여 생성 된 그래프가 올바르게 방송되지 않습니다.
class VertexProperty(val id:Long) extends Serializable
case class User(val userId:Long, var offset:Int, val userCode:String, val Name:String, val Surname:String, val organizational_unit:String, val UME:String, val person_type:String, val SOD_HIGH:String, val SOD_MEDIUM:String, val SOD_LOW:String, val Under_mitigated:String) extends VertexProperty(userId)
case class Account(val accountId:Long, var offset:Int, val userCode:String, val userId:String, val account_creation_date:String, var disabled:String, var forcechangepwd:String, var pwdlife:String, var numberloginerror:String, var lastchangepwd:String, var lastlogin:String, var lastwronglogin:String, var state:String, var expire:String, var last_cert_time:String, var creation_date:String, var creation_user:String,var challenge_counter:String, var challenge_failed_attempt:String) extends VertexProperty(accountId) //Check if userCode is actually the code in this example.
case class Application(var applicationId:Long, var offset:Int, var Name:String, var Description:String, var Target:String, var Owner:String, var Ownercode:String, var Creation_date:String, var Creation_user:String) extends VertexProperty(applicationId)
case class Entitlement(val entitlementId:Long, var offset:Int, val Name:String, var Code:String, var Description:String, var Type:String, var Application:String, var Administrative:String, var Parent_ID:String, var Owner_code:String, var Scope_type:String, var Business_name:String, var Business_policy:String, var SOD_high:String, var SOD_medium:String, var SOD_low:String) extends VertexProperty(entitlementId)
/*
Some code for computing vertexRDD and edges
*/
val graph: Graph[VertexProperty,String] = Graph(vertexRDD, edges, new VertexProperty(-1))
val triplets = graph.triplets
val temp = triplets.map(t => t.attr)
val distinct_users = temp.distinct.filter(t => t != "NULL")
var bcast_graph = sc.broadcast(graph)
val users_graph = distinct_users.map(du => du -> bcast_graph.value.subgraph(epred = t => t.attr == du))
또한 시도해 보았습니다. val user_graph = bcast_graph.value.subgraph (epred = t => t.attr == "273") // "273"은 사용자 ID입니다. 그러면 원하는 출력이 나옵니다. 지도 기능을 사용하는 동안 출력이 왜 나오지 않는지 알 수 없습니다. –
나는 왜 당신이 방송하고 있는지 얻지 못한다. '그래프 '는'RDD'로 구성되어 있기 때문에 본질적으로 병렬 처리됩니다. 'sc.broadcast (graph)'로 무엇을 성취하고 있다고 생각하십니까? –
map 함수에서 생성 된 그래프를 사용하고 싶습니다. 그러므로, 나는 그것을 사용하기 전에 방송 할 필요가있다. 내가 빠진 게 있니? –