首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala-Spark:将Dataframe转换为RDD[Edge]

Scala-Spark:将Dataframe转换为RDD[Edge]
EN

Stack Overflow用户
提问于 2017-09-24 10:15:37
回答 1查看 488关注 0票数 1

我有一个表示图的边的dataframe;这是模式:

代码语言:javascript
复制
root |-- src: string (nullable = true) 
     |-- dst: string (nullable = true) 
     |-- relationship: struct (nullable = false) 
     | |-- business_id: string (nullable = true) 
     | |-- normalized_influence: double (nullable = true)

我想将它转换为RDDEdge,以便使用Pregel,而我的困难在于属性“关系”。怎样才能转换它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-24 14:39:18

Edge是一个参数化类。这意味着,除了源ids和目标ids之外,您可以在每个边缘存储任何您喜欢的东西。在您的例子中,它可能是一个Edge[Relationship]。您可以使用case类同时映射数据格式和RDD[Edge[Relationship]]

代码语言:javascript
复制
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
    )
} 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46388953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档