【发布时间】: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)]
到目前为止我尝试了什么:
- 我检查了 graphx api 文档@https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.graphx.VertexRDD,但在我看来,添加无限数量的属性应该没有问题,只要将它们包装在一个元组中即可。
- 我尝试在元组前添加
Seq()或flatMap(),但没有成功 - 我尝试在网上查找具有三个以上顶点属性的图形示例,但似乎没有
- 我尝试使用 SQL 从起始 DF 中排除任何 Null 值
所以,是的,我基本上已经到了我觉得自己像个彻头彻尾的砖头的地步。我觉得我在这里忽略了一些非常简单的东西,但是在玩了将近一天之后,现在任何帮助都会非常感激。谢谢!
【问题讨论】:
-
请在您的问题中包含菜单结构图片。
-
不幸的是它不会让我因为我没有足够的声誉。请参考link
标签: scala apache-spark graph