我有一个表,我正在spark中加载到dataframe,它有以下模式:
verticesDf.printSchema
root
|-- id: integer (nullable = true)
|-- target: string (nullable = true)
|-- batch_id: integer (nullable = true)
|-- x: double (nullable = true)
|-- y: double (nullable = true)
|-- z: double (nullable = true)
|-- size: double (nullable = true)
如何将它转换为vertexrdd,以便稍后使用它构建图形?
我尝试了以下方法:
case class SRow( target:String, batch_id:Double, x:Double, y:Double, z:Double, size:Double)
val sourceDS: Dataset[(VertexId, SRow)] = verticesDf.as[(VertexId, SRow)]
val vertVX=VertexRDD(sourceDS)
但是这个和其他很多都不能给出结果-我总是得到一些类型不匹配。正确的方法是什么?
1条答案
按热度按时间k0pti3hp1#
至少,要创建一个图,您需要两个RDD。类型之一
RDD[(VertexId, VD)]
包含顶点的。一VertexId
只不过是一个Long
以及VD
可以是任何东西,你的Srow
例如类。另一个是rdd类型RDD[Edge[ED]]
,在哪里ED
类似于VD
可以是任何东西。这里您将讨论vextex rdd的创建。您正在尝试将Dataframe转换为类型为的数据集
Dataset[(VertexId, SRow)]
. 它不起作用有两个原因。id
是整数而不是长的,结构错误。您的Dataframe包含两个以上的列。以下是操作方法:
请注意,在最后一行中,图形是从RDD而不是数据集创建的,因此我们需要对顶点进行转换。