2017-09-24 5 views
0

그래프의 가장자리를 나타내는 데이터 프레임이 있습니다.스칼라 스파크 : 데이터 프레임을 RDD로 변환 [Edge]

내가하는 프레 겔 API 나의 어려움을 함께 작동하도록 RDD [가장자리]로 변환 할
root |-- src: string (nullable = true) 
    |-- dst: string (nullable = true) 
    |-- relationship: struct (nullable = false) 
    | |-- business_id: string (nullable = true) 
    | |-- normalized_influence: double (nullable = true) 

는 속성 "관계"에이 스키마입니다. 어떻게 변환 할 수 있습니까?

답변

1

Edge은 매개 변수화 된 클래스입니다. 즉, 원본 및 대상 ID 외에도 각 가장자리에 원하는 내용을 저장할 수 있습니다. 귀하의 경우 아마 Edge[Relationship] 일 것입니다. 사례 클래스를 사용하여 데이터 프레임과 RDD[Edge[Relationship]]을 매핑 할 수 있습니다.

import scala.util.hashing.MurmurHash3 
case class Relationship(business_id: String, normalized_influence: Double) 
case class MyEdge(src: String, dst: String, relationship: Relationship) 

val edges: RDD[Edge[Relationship]] = df.as[MyEdge].rdd.map { edge => 
    Edge(
     MurmurHash3.stringHash(edge.src).toLong, // VertexId type is a Long, so we need to hash your string 
     MurmurHash3.stringHash(edge.dst).toLong, 
     edge.relationship 
    ) 
} 
관련 문제