nebula-exchange 导入 neo4j精度缺失问题

提问参考模版:

  • nebula 版本:3.2.1
  • 部署方式:分布式
  • 安装方式:RPM
  • 是否为线上版本: N
  • 问题的具体描述: nebula-exchange 导入 neo4j提示有精度缺失问题,exchange 是否有配置跳过此类异常或者应该如果配置nebula graph类型
org.neo4j.driver.exceptions.value.LossyCoercion: Cannot coerce INTEGER to Java int without losing precision
	at org.neo4j.driver.internal.value.IntegerValue.asInt(IntegerValue.java:57)
	at com.vesoft.nebula.exchange.utils.Neo4jUtils$.convertNeo4jData(Neo4jUtils.scala:21)
	at com.vesoft.nebula.exchange.reader.Neo4JReader$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply$mcVI$sp(ServerBaseReader.scala:194)
	at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:160)
	at com.vesoft.nebula.exchange.reader.Neo4JReader$$anonfun$1$$anonfun$apply$2.apply(ServerBaseReader.scala:193)
	at com.vesoft.nebula.exchange.reader.Neo4JReader$$anonfun$1$$anonfun$apply$2.apply(ServerBaseReader.scala:191)
	at scala.collection.Iterator$$anon$11.next(Iterator.scala:410)
	at scala.collection.Iterator$$anon$12.next(Iterator.scala:445)
	at scala.collection.Iterator$$anon$10.next(Iterator.scala:394)
	at scala.collection.Iterator$class.foreach(Iterator.scala:891)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
	at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:59)
	at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:104)
	at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:48)
	at scala.collection.TraversableOnce$class.to(TraversableOnce.scala:310)
	at scala.collection.AbstractIterator.to(Iterator.scala:1334)
	at scala.collection.TraversableOnce$class.toBuffer(TraversableOnce.scala:302)
	at scala.collection.AbstractIterator.toBuffer(Iterator.scala:1334)
	at scala.collection.TraversableOnce$class.toArray(TraversableOnce.scala:289)
	at scala.collection.AbstractIterator.toArray(Iterator.scala:1334)
	at org.apache.spark.rdd.RDD$$anonfun$take$1$$anonfun$29.apply(RDD.scala:1364)
	at org.apache.spark.rdd.RDD$$anonfun$take$1$$anonfun$29.apply(RDD.scala:1364)
	at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2101)
	at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2101)
	at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
	at org.apache.spark.scheduler.Task.run(Task.scala:121)
	at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:402)
	at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360)
	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:408)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)

1 个赞
  1. 出现原因:使用nebula-exchange_spark_2.4-3.0.0.jar 进行导入数据时,neo4j导入工具Neo4jUtils.convertNeo4jData方法在转化int时发现 其值超过int最大或最小值抛出异常
  2. 目前解决方案:修改jar包内容,修改类名称com.vesoft.nebula.exchange.utils.Neo4jUtils$ 此处只修改int 转换,其他内容原封不动
} else if ("INTEGER".equals(str1)) {
      str2 = BoxesRunTime.boxToLong(value.asLong()).toString();
  }
  1. 希望官方能够修复此问题而非自己临时改动,版本信息:
spark: 2.4.0
nebula graph: 3.2.1
exchange: 3.0.0
1 个赞

@nicole 瞅瞅?

看看这个pr https://github.com/vesoft-inc/nebula-exchange/pull/93, 已经8月份fix了哈,你可以用最新的 3.3.0版本

这个我看到了,但是我用的database 版本3.2.1 看文档说的是对应 exchange 3.0.0的,这个意思是我可以使用exchange 3.3.0 连接database 3.2.1 对吧

是的 可以的

好的,感谢,我看到版本标注以为是不能混用的 :neutral_face:

哈喽,如果 nicole 的某个回复解决了你的问题,请将这条回复勾选为 解决方案 哈,可以帮助遇到相似问题的用户快速的找到答案呢~ :heart:

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。