arrays - 声明一个 Edge 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(VertexId, VertexId, edgeProperty("", "")) )
但在第一行,我不想用虚拟值声明一个额外的边,而是想声明一个这样的空数组:
var edgeArray = Array.empty[Edge[(Long, Long, Object)]]
edgeArray = edgeArray ++ Array(Edge(VertexId, VertexId, edgeProperty("", "")) )
但它给了我关于“++”的以下编译错误:
类型不匹配; 找到:Array[org.apache.spark.graphx.Edge[_ >: (Long, Long, Object) with net.sansa_stack.template.spark.rdf.TripleReader.edgeProperty <: Product with Serializable]] 需要:Array[org .apache.spark.graphx.Edge[(Long, Long, Object)]] 注意:org.apache.spark.graphx.Edge[_ >: (Long, Long, Object) with net.sansa_stack.template.spark.rdf .TripleReader.edgeProperty <: Product with Serializable] >: org.apache.spark.graphx.Edge[(Long, Long, Object)],但类 Array 在类型 T 中是不变的。您可能希望研究通配符类型,例如
_ >: org.apache.spark.graphx.Edge[(Long, Long, Object)]
.
我也试过这个:
edgeArray :+ Array(Edge(VertexId, VertexId, edgeProperty("", "")) )
它没有给我编译错误,但没有在数组中添加任何内容。
解决方案
第一个数组的类型不正确。请注意,Edge
它仅由其属性参数化,因此您尝试合并的表达式的类型是Array[Edge[edgeProperty]]
:
scala> :t Array(Edge(0L, 0L, edgeProperty("", "")))
Array[org.apache.spark.graphx.Edge[edgeProperty]]
当您将变量定义为Array.empty[Edge[(Long, Long, Object)]]
.
该Object
部分是第二个问题。正如您在异常消息中所读到的,Array
(与任何其他可变容器一样)是不变的。所以如果你真的想和你一起去,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
推荐阅读
- xpath - 如何从 Jmeter 的响应中获取 xpath 查询(隐藏)?
- sql-server - ssis 中的错误日期值
- sql-server - Create database using SSMS GUI fails for Azure SQL Managed Instance
- java - 处理由两个单独的语句引发的相同类型的异常
- python - 将 df.apply 与一个计算值的函数结合起来
- amazon-athena - 为什么雅典娜表名应该是全球唯一的?
- python - Jinja2中的变量内部变量
- selenium - 打开邮箱中发送的验证码,然后复制此代码并将其粘贴到 selenium 测试中的验证码字段中
- javascript - 如何编写显示文本的事件处理程序
- python - 使用openpyxl在两个excel单元格之间画一条线