У меня есть фильмы и соответствующие им касты в базе данных 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)
}
Если у вас есть какие-либо предложения о том, как я могу заставить это работать (или о том, как я мог бы оптимизировать свой запрос), я бы действительно их сделал.