【问题标题】:Spark Graphx Vertices with Multiple Attributes (Type Mismatch - Product with Serializable Error)具有多个属性的 Spark Graphx 顶点(类型不匹配 - 具有可序列化错误的产品)
【发布时间】:2018-03-27 18:32:14
【问题描述】:

我正在尝试做的事情: 我正在使用带有 graphx 的 Spark 2.3.0。我有一个类似于菜单结构的简单 DF,如下所示:Menu Structure。当我使用以下代码创建具有三个顶点属性(Int、String、String)的图来创建 Vertex RDD 时,它可以完美运行:

val menuVerticesRDD: RDD[(VertexId, (Int,String,String))] = menuVertexDF
.rdd
.map{row: Row => (row.get(0), row.get(1), row.get(2))}
.map{x => (MurmurHash3.stringHash(x._1.toString).toLong, 
( x._1.asInstanceOf[Int], x._2.asInstanceOf[String], x._3.asInstanceOf[String] ))}

然后我使用以下代码尝试使用四个属性(Int、String、String、String)完全相同的东西:

val menuVerticesRDD: RDD[(VertexId, (Int,String,String,String))] = menuVertexDF
.rdd
.map{row: Row => (row.get(0), row.get(1), row.get(2), row.get(3))}
.map{x => (MurmurHash3.stringHash(x._1.toString).toLong, (  x._1.asInstanceOf[Int], x._2.asInstanceOf[String], x._3.asInstanceOf[String], x._4.asInstanceOf[String] ))

...然后引发类型不匹配错误:

Name: Compile Error
Message: <console>:153: error: type mismatch;
found   : org.apache.spark.rdd.RDD[(org.apache.spark.graphx.VertexId, (Int,     String, String, String))]
(which expands to)  org.apache.spark.rdd.RDD[(Long, (Int, String, String, String))]
required: org.apache.spark.rdd.RDD[(org.apache.spark.graphx.VertexId, Product with Serializable)]
(which expands to)  org.apache.spark.rdd.RDD[(Long, Product with Serializable)]

到目前为止我尝试了什么:

所以,是的,我基本上已经到了我觉得自己像个彻头彻尾的砖头的地步。我觉得我在这里忽略了一些非常简单的东西,但是在玩了将近一天之后,现在任何帮助都会非常感激。谢谢!

【问题讨论】:

  • 请在您的问题中包含菜单结构图片。
  • 不幸的是它不会让我因为我没有足够的声誉。请参考link

标签: scala apache-spark graph


【解决方案1】:

我想你做得很好但错过了通过默认元组。按以下方式初始化您的图表。

val graph = Graph(menuVerticesRDD, menuEdgesRDD, (0, "NONE", "NONE", "NONE"))

第三个参数是“defaultVertexAttr”,它应该符合顶点的数据类型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多