使用Spark连接Neo4j时出现协议版本不兼容异常求助
解决Neo4j与Spark连接器协议版本不兼容问题
问题根源
你遇到的org.neo4j.driver.exceptions.ClientException是版本匹配冲突导致的:
- 你使用的
neo4j-connector-apache-spark_2.11-4.0.2依赖的Neo4j Java Driver为4.x版本,该驱动默认仅支持Bolt协议v2及以上版本; - 而你的Neo4j 3.3.x仅支持Bolt协议v1,两者协议版本不兼容,直接导致连接握手失败。
解决方案
方案1:降级Spark连接器版本(推荐)
选择适配Neo4j 3.3.x的连接器版本,比如neo4j-connector-apache-spark_2.11-2.4.5——这个版本专门对应Spark 2.4系列,依赖的Neo4j Driver是1.x版本,能完美兼容Neo4j 3.3.x的Bolt v1协议。
替换你的连接器jar包后,重新运行作业即可。
方案2:强制驱动使用旧协议(可选)
如果不想降级连接器,可以在Spark读取Neo4j数据的配置中强制指定使用Bolt v1协议:
val df = spark.read .format("org.neo4j.spark.DataSource") .option("url", "bolt://localhost:7687") .option("authentication.basic.username", "neo4j") .option("authentication.basic.password", "password") .option("neo4j.bolt.protocol.version", "1") // 强制启用v1协议 .load()
注意:这种方式可能会限制部分新特性的使用,仅作为临时替代方案,优先推荐方案1。
验证
替换依赖或添加配置后,重新执行Spark读取操作,确认是否能正常连接Neo4j并获取数据。
内容的提问来源于stack exchange,提问作者sherin
相关产品推荐
相关产品推荐

