使用Apache TinkerPop Gremlin加载CSV文件时遇方法调用错误求助
问题解决:Gremlin脚本创建图时
getVertex()方法报错 错误原因
你遇到的错误源于三个关键点:
TinkerGraph.getVertex()方法要求传入顶点ID的对象类型(默认是Long),但你传入的是字符串,类型不匹配;- 调用
g.addVertex(v)时直接传字符串,实际是将该字符串设为顶点的标签(Label),而非顶点ID,导致后续无法通过字符串找到对应顶点; - 脚本未跳过CSV的表头行,会尝试将"Source"、"Destination"也作为顶点添加,不符合需求。
修正后的脚本
g = TinkerGraph.open() vs = [] as Set // 读取CSV,跳过表头,收集所有顶点ID new File("edges.txt").eachLine { l, lineNum -> if (lineNum == 1) return // 跳过第一行表头 p = l.split("\t") // 将字符串转为Long类型,匹配TinkerGraph默认ID类型 vs << p[0].toLong() vs << p[1].toLong() } // 添加顶点,明确指定ID vs.each { vId -> g.addVertex(T.id, vId) } // 读取CSV添加边,用Gremlin遍历器查找顶点 new File("edges.txt").eachLine { l, lineNum -> if (lineNum == 1) return p = l.split("\t") sourceId = p[0].toLong() destId = p[1].toLong() // 用g.V(id).next()获取顶点,这是标准Gremlin用法 g.addEdge(g.V(sourceId).next(), g.V(destId).next(), "friend") } // 验证所有边 g.E
关键修正点
- 指定顶点ID:用
T.id参数明确设置顶点ID,确保和CSV中的数值对应,同时转为Long类型适配TinkerGraph默认配置; - 标准顶点查找:使用
g.V(id).next()替代底层的getVertex(),这是跨Gremlin实现的通用写法,避免依赖特定图数据库的底层方法; - 跳过表头:添加行号判断,跳过CSV的第一行表头,避免无效顶点。
内容的提问来源于stack exchange,提问作者bahzad
相关产品推荐
相关产品推荐

