Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Neo4j认为密码就是数据库_Apache Spark_Neo4j - Fatal编程技术网

Apache spark Neo4j认为密码就是数据库

Apache spark Neo4j认为密码就是数据库,apache-spark,neo4j,Apache Spark,Neo4j,我正在尝试集成Spark和Neo4j。我是Neo4j的新手。我有以下短火花应用程序 import com.typesafe.config._ import org.apache.spark.sql.SparkSession import org.neo4j.spark._ object Neo4jStorer { var conf :Config = null def main(args: Array[String]): Unit = { val spark = getSp

我正在尝试集成Spark和Neo4j。我是Neo4j的新手。我有以下短火花应用程序

import com.typesafe.config._
import org.apache.spark.sql.SparkSession

import org.neo4j.spark._

object Neo4jStorer {

  var conf :Config = null
  def main(args: Array[String]): Unit = {
    val spark = getSparkSession()
    val sc = spark.sparkContext
    val g = Neo4jGraph.loadGraph(sc, label1="a", relTypes=Seq("rel"), label2 = "b")
    val vCount = g.toString

    println("Count= " + vCount)
  }

  def getSparkSession(): SparkSession = {
    SparkSession
      .builder
      .appName("SparkNeo4j")
      .config("spark.neo4j.bolt.url", "neo4j://127.0.0.1:7687")
      .config("spark.neo4j.bolt.user", "neo4j")
      .config("spark.neo4j.bolt.password", "FakePassword")
      .getOrCreate()
  }
}
我使用Spark 3.0作为此代码的示例。当我运行这个程序时,我得到以下信息

20/10/17 14:36:36 ERROR LoadBalancer: Failed to update routing table for database 'FakePassword'. Current routing table: Ttl 1602963396190, currentTime 1602963396527, routers AddressSet=[], writers AddressSet=[], readers AddressSet=[], database 'FakePassword'.
org.neo4j.driver.exceptions.FatalDiscoveryException: Unable to get a routing table for database 'FakePassword' because this database does not exist
如果我更改密码,我会得到一个身份验证错误,我再次看到错误的密码显示为数据库。我创建了一个名为FakePassword的数据库,但仍然出现了相同的错误。为什么会发生这种情况?我如何修复它


另外,当我尝试获取g.vertices.count(如下面的示例所示)时,我得到了一个编译错误。

通过这段代码,我能够将数据帧中的数据获取到Neo4j中,这正是我真正想要做的。这似乎不是理想的解决方案,因为它使用foreach。我愿意改进


import com.typesafe.config._
import org.apache.spark.sql.SparkSession
import org.neo4j.driver.{AuthTokens, GraphDatabase, Session}
import org.neo4j.spark._

object StackoverflowAnswer {
  def main(args: Array[String]): Unit = {
    val spark = getSparkSession()
    val sc = spark.sparkContext

    import spark.implicits._

    val df = sc.parallelize(List(1, 2, 3)).toDF

    df.foreach(
      row => {
        val query = "CREATE (n:NumLable {num: " + row.get(0).toString +"})"
        Neo4jSess.session.run(query)
        ()
      }
    )

  }

  def getSparkSession(): SparkSession = {
    SparkSession
      .builder
      .appName("SparkNeo4j")
      .getOrCreate()
  }
}

object Neo4jSess {
  /**
   * Store a Neo4j session in a object so that it can be used by Spark
   */
  var conf :Config = null

  this.conf = ConfigFactory.load().getConfig("DeltaStorer")

  val neo4jUrl: String = "bolt://127.0.0.1:7687"
  val neo4jUser: String = "neo4j"
  val neo4jPassword: String = "FakePassword"

  val driver = GraphDatabase.driver(neo4jUrl, AuthTokens.basic(neo4jUser, neo4jPassword))

  val session: Session = driver.session()
}


有了这段代码,我能够将数据帧中的数据导入Neo4j,这正是我真正想要做的。这似乎不是理想的解决方案,因为它使用foreach。我愿意改进


import com.typesafe.config._
import org.apache.spark.sql.SparkSession
import org.neo4j.driver.{AuthTokens, GraphDatabase, Session}
import org.neo4j.spark._

object StackoverflowAnswer {
  def main(args: Array[String]): Unit = {
    val spark = getSparkSession()
    val sc = spark.sparkContext

    import spark.implicits._

    val df = sc.parallelize(List(1, 2, 3)).toDF

    df.foreach(
      row => {
        val query = "CREATE (n:NumLable {num: " + row.get(0).toString +"})"
        Neo4jSess.session.run(query)
        ()
      }
    )

  }

  def getSparkSession(): SparkSession = {
    SparkSession
      .builder
      .appName("SparkNeo4j")
      .getOrCreate()
  }
}

object Neo4jSess {
  /**
   * Store a Neo4j session in a object so that it can be used by Spark
   */
  var conf :Config = null

  this.conf = ConfigFactory.load().getConfig("DeltaStorer")

  val neo4jUrl: String = "bolt://127.0.0.1:7687"
  val neo4jUser: String = "neo4j"
  val neo4jPassword: String = "FakePassword"

  val driver = GraphDatabase.driver(neo4jUrl, AuthTokens.basic(neo4jUser, neo4jPassword))

  val session: Session = driver.session()
}


请尝试更新spark-defaults.conf:

spark.jars.packages             neo4j-contrib:neo4j-spark-connector:2.4.5-M2
spark.neo4j.url                 bolt://XX.XXX.X.XXX:7687
spark.neo4j.user                neo4j
spark.neo4j.password            test

请尝试更新spark-defaults.conf:

spark.jars.packages             neo4j-contrib:neo4j-spark-connector:2.4.5-M2
spark.neo4j.url                 bolt://XX.XXX.X.XXX:7687
spark.neo4j.user                neo4j
spark.neo4j.password            test

neo4j螺栓url以
bolt://...
。你能纠正一下并检查一下吗?另外,由于您试图在本地运行它,您可以指定
.builder().master(“本地”)
将URL连接到本地。更改为bolt并使用.builder().master(“本地”)无效。我找到了另一个解决办法。我把它包括在下面。它可能不适用于所有遇到我的问题的人,我对改进持开放态度bolt://...。你能纠正一下并检查一下吗?另外,由于您试图在本地运行它,您可以指定
.builder().master(“本地”)
将URL连接到本地。更改为bolt并使用.builder().master(“本地”)无效。我找到了另一个解决办法。我把它包括在下面。这可能不适用于所有有我问题的人,我愿意改进。