如何在GraphX中创建二部图

如何在GraphX中创建二部图,graph,apache-spark,bipartite,Graph,Apache Spark,Bipartite,我能够通过GraphX API使用vertexRDD和edgeRDD构建图形,没有问题。i、 e: val-graph:graph[(String,Int),Int]=graph(vertexRDD,edgeRDD) 但是,如果我想使用两个独立的vertexRDD而不是一个(二部图),我不知道从哪里开始。例如,一个包含购物者和产品顶点的图 我的问题很广泛,所以我并不期待有一个详细的例子,而是一个正确方向的暗示或推动。如果您有任何建议,我们将不胜感激。例如,要将用户和产品建模为二部图,我们可以执

我能够通过GraphX API使用
vertexRDD
edgeRDD
构建图形,没有问题。i、 e:

val-graph:graph[(String,Int),Int]=graph(vertexRDD,edgeRDD)
但是,如果我想使用两个独立的vertexRDD而不是一个(二部图),我不知道从哪里开始。例如,一个包含购物者和产品顶点的图


我的问题很广泛,所以我并不期待有一个详细的例子,而是一个正确方向的暗示或推动。如果您有任何建议,我们将不胜感激。

例如,要将用户和产品建模为二部图,我们可以执行以下操作:

trait VertexProperty
案例类UserProperty(val名称:String)扩展了VertexProperty
案例类ProductProperty(val名称:String,
val价格:双精度)扩展VertexProperty
val用户:RDD[(VertexId,VertexProperty)]=sc.parallelize(Seq(
(1L,用户属性(“用户1”),(2L,用户属性(“用户2”))
val产品:RDD[(VertexId,VertexProperty)]=sc.parallelize(序列号(
(1001L,ProductProperty(“foo”,1.00)),(1002L,ProductProperty(“bar”,3.99)))
val顶点=顶点RDD(用户+产品)
//然后,图形可能具有以下类型:
val图形:图形[VertexProperty,字符串]=null

如果您的顶点包含相同的类型,为什么不
union()
两个顶点RDD并将其提交到您的图形中?我不确定这是否是您要寻找的,但您可以
union()
两个具有顶点的RDD(请注意,您需要唯一的
VertexId
s)然后创建连接购物者顶点和产品顶点的边。如果需要,还可以通过其
顶点ID
连接两个图(或图和顶点的RDD)。除非你提供更多的细节,否则很难说什么对你最好。是的,这很有效。我希望您不介意小的更改,但是这个
类VertexProperty()
看起来很奇怪。我知道,官方文件,但…没问题。请做!谢谢你的反馈。我现在已经创建了两个独立的VertexRDD:VRDDSHOPER:VertexRDD[String]VRDDProduct:VertexRDD[(String,Double)],现在我假设需要将它们分配给各自的案例类UserProperty和ProductProperty。在这一点上,我碰到了一堵概念墙。我需要通过你们建议的类结构将我的VertexRDD放入graph[VD,ED]。当案例类没有定义为VertexRDD时,我该怎么做?再次为没有具体说明而道歉,但这是我在概念上正在努力解决的问题。您可以执行
++
来创建VertexProperty。如果我弄错了,请在@zero323纠正我。我用例子编辑了一个答案。请不要确认产品和用户属于
RDD[(VertexId,VertexProperty)]
RDD[(VertexId,ProductProperty)]
/
RDD[(VertexId,UserProperty)]