You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Neo4j Spark Connector构建Spark应用时导入报错求助

解决Neo4j Spark Connector导入org.neo4j.spark.Neo4j报错问题

错误原因

你用的是Neo4j Spark Connector 4.x版本(4.1.4_for_spark_2.4),但代码里写的是旧版Connector(2.x及更早)的API——org.neo4j.spark.Neo4j这个类在4.x版本里已经被移除,API结构完全重构,所以才会报“object Neo4j is not a member of package org.neo4j.spark”的错误。另外你代码里还有个低级问题:main方法嵌套定义了,这也会导致代码无法正常运行。

解决方案

有两种处理方式,选一个适合你的:

方案1:适配4.x版本的新API(推荐)

保留当前build.sbt里的依赖,修改代码使用4.x版本的API即可。4.x版本主要通过Spark DataFrame/SQL API来操作Neo4j,示例代码如下:

import org.apache.spark.sql.SparkSession

object FirstApp {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("Test-neo4j-skel")
      .master("local[*]")
      // 填写你的Neo4j连接信息
      .config("neo4j.url", "bolt://localhost:7687")
      .config("neo4j.authentication.basic.username", "neo4j")
      .config("neo4j.authentication.basic.password", "你的密码")
      .getOrCreate()

    // 用Cypher查询加载数据为DataFrame
    val df = spark.read
      .format("org.neo4j.spark.DataSource")
      .option("query", "MATCH (n:Person) RETURN id(n) as id")
      .load()

    // 执行数据操作,比如计数、打印结果
    println(df.count())
    df.show()

    spark.stop()
  }
}

方案2:换回旧版Connector使用原API

如果你不想修改代码逻辑,想继续用org.neo4j.spark.Neo4j这个类,就把Connector版本换回2.x系列,修改build.sbt的依赖:

// 启用旧版Connector依赖
libraryDependencies += "neo4j-contrib" %% "neo4j-spark-connector" % "2.1.0-M4"
// 注释掉4.x版本的依赖
// libraryDependencies += "org.neo4j" % "neo4j-connector-apache-spark_2.12" % "4.1.4_for_spark_2.4"

同时修正代码里嵌套的main方法:

import org.apache.spark.{SparkConf, SparkContext}
import org.neo4j.spark.Neo4j

object FirstApp {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
      .setAppName("Test-neo4j-skel")
      .setMaster("local[*]")
      // 配置Neo4j连接信息
      .set("neo4j.url", "bolt://localhost:7687")
      .set("neo4j.user", "neo4j")
      .set("neo4j.password", "你的密码")

    val sc = new SparkContext(conf)
    val neo = Neo4j(sc)

    val rdd = neo.cypher("MATCH (n:Person) RETURN id(n) as id ").loadRowRdd
    println(rdd.count())

    sc.stop()
  }
}

注意事项

  • 确保Neo4j服务处于运行状态,连接的地址、用户名、密码要与实际配置一致。
  • Spark 2.4搭配Scala 2.12时,依赖后缀为_2.12;如果你的项目使用Scala 2.11,需要更换对应后缀的Connector版本。

内容的提问来源于stack exchange,提问作者dfouheqoijefoih

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:39:35