Как добавить отношения в граф Neo4j с GraphFrames в Spark - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть фильмы и соответствующие им касты в базе данных Neo4j, и я хочу создать COWORKER отношения между кастами каждого фильма.

Я попытался выполнить запрос на шифрование для самой базы данных, и он не масштабировался, поэтому я хотел бы попробовать выполнить запрос с помощью Spark, чтобы проверить, работает ли он быстрее.Я использую neo4j-spark-connector, и я думаю, что я должен использовать GraphFrame для хранения данных.Код выглядит следующим образом:

import org.neo4j.spark._
import org.apache.spark.{SparkConf, SparkContext}
import org.graphframes._

object SparkNeo4jApp extends App {

  val conf = new SparkConf()
    .setAppName("SparkNeo4j")
    .setMaster("local[*]")
    .set("spark.neo4j.bolt.password", "password")

  val sc = new SparkContext(conf)
  val neo = Neo4j(sc)
  val graphFrame = neo.pattern(("Person","name"),("WORKED_ON",null), ("Film","title")).partitions(3).rows(1000).loadGraphFrame

  neo.cypher("MATCH (f:Film) WHERE size((f)<-[:WORKED_ON]-())>1 " +
    "WITH[(f)<-[:WORKED_ON]-(p) | p] as coworkers " +
    "UNWIND coworkers as first " +
    "UNWIND coworkers as second WITH first, second WHERE id(first) < id(second) " +
    "MERGE (first)-[r:COWORKER]-(second) " +
    "ON CREATE SET r.strength = 1 " +
    "ON MATCH SET r.strength = r.strength + 1")

  neo.saveGraph(graphFrame)
}

Если у вас есть какие-либо предложения о том, как я могу заставить это работать (или о том, как я мог бы оптимизировать свой запрос), я бы действительно их сделал.

...