2017-09-24 17 views
0

グラフのエッジを表すデータフレームがあります。これはスキーマです:Scala-Spark:データフレームをRDDに変換する[Edge]

root |-- src: string (nullable = true) 
    |-- dst: string (nullable = true) 
    |-- relationship: struct (nullable = false) 
    | |-- business_id: string (nullable = true) 
    | |-- normalized_influence: double (nullable = true) 

私はプレゲルAPIと私の難しさで動作するようにRDD [エッジ]に変換したいのは、属性「関係」です。どのように変換することができますか?

答えて

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 
    ) 
} 
関連する問題