Arrays 声明Edge Graphx类型的空数组
我正在从文件中读取数据以创建图形的边。我已经声明了一个数组,并在其中逐个添加了边。此代码工作正常:Arrays 声明Edge Graphx类型的空数组,arrays,scala,apache-spark,spark-graphx,Arrays,Scala,Apache Spark,Spark Graphx,我正在从文件中读取数据以创建图形的边。我已经声明了一个数组,并在其中逐个添加了边。此代码工作正常: class AIRecipes() case class edgeProperty(val relation: String, val usedIn: String) extends AIRecipes var edgeArray = Array(Edge(0L, 0L, edgeProperty("", ""))) edgeArray = edgeArray ++ Array(Edge(Ve
class AIRecipes()
case class edgeProperty(val relation: String, val usedIn: String) extends AIRecipes
var edgeArray = Array(Edge(0L, 0L, edgeProperty("", "")))
edgeArray = edgeArray ++ Array(Edge(VertexId, VertexId, edgeProperty("", "")) )
但在第一行中,我不想用伪值声明额外的边,而是要声明一个空数组,如下所示:
var edgeArray = Array.empty[Edge[(Long, Long, Object)]]
edgeArray = edgeArray ++ Array(Edge(VertexId, VertexId, edgeProperty("", "")) )
但是它在'+'上给了我以下编译错误:
类型失配;找到:数组[org.apache.spark.graphx.Edge[\u>:
长长的,长长的
net.sansa_stack.template.spark.rdf.TripleReader.edgeProperty:长,长,带有
net.sansa_stack.template.spark.rdf.TripleReader.edgeProperty:org.apache.spark.graphx.Edge[Long,
Long,Object],但类数组在类型T中是不变的。您可能希望
要调查通配符类型,如>:
org.apache.spark.graphx.Edge[Long,Long,Object]
我也试过:
edgeArray :+ Array(Edge(VertexId, VertexId, edgeProperty("", "")) )
它没有给我编译错误,但没有在数组中添加任何内容。第一个数组的类型不正确。请注意,Edge仅由其属性参数化,因此您尝试合并的表达式类型为array[Edge[edgeProperty]: 当您将变量定义为Array.empty[Edge[Long,Long,Object]]时 对象部分是第二个问题。正如您在异常消息中所看到的,数组作为任何其他可变容器都是不变的。因此,如果您确实想使用对象,您必须:
scala> var edgeArray = Array.empty[Edge[Object]]
edgeArray: Array[org.apache.spark.graphx.Edge[Object]] = Array()
scala> edgeArray = edgeArray ++ (Array(Edge(1L, 2L, edgeProperty("", "")) ): Array[Edge[Object]])
edgeArray: Array[org.apache.spark.graphx.Edge[Object]] = [Lorg.apache.spark.graphx.Edge;@338
但我还是建议
scala> var edgeArray = Array.empty[Edge[edgeProperty]]
edgeArray: Array[org.apache.spark.graphx.Edge[edgeProperty]] = Array()
scala> edgeArray = edgeArray ++ Array(Edge(1L, 2L, edgeProperty("", "")) )
edgeArray: Array[org.apache.spark.graphx.Edge[edgeProperty]] = [Lorg.apache.spark.graphx.Edge;@7d59e8d4
您可以发布edgeProperty的签名吗?@user9613318 edgeProperty是一个类。类AIRecipes,case类edgePropertyval关系:String,val usedIn:String扩展AIRecipesI更改了var-edgeArray=Array.empty[Edge[Long,Long,Object]]为var-edgeArray=Array.empty[Edge[edgeProperty]]现在工作正常。谢谢:
scala> var edgeArray = Array.empty[Edge[edgeProperty]]
edgeArray: Array[org.apache.spark.graphx.Edge[edgeProperty]] = Array()
scala> edgeArray = edgeArray ++ Array(Edge(1L, 2L, edgeProperty("", "")) )
edgeArray: Array[org.apache.spark.graphx.Edge[edgeProperty]] = [Lorg.apache.spark.graphx.Edge;@7d59e8d4