- create语句
CREATE (a:Person {name: '张三', sex: '男'})
如利用create批量写入,这里我使用的是scala+spark,代码如下:
object Neo4jConnect {
def main(args: Array[String]):Unit = {
//数据库连接
val spark=SparkSession.builder().appName("play")
.master("local[*]")
.config("spark.neo4j.bolt.url", "bolt://localhost:7687")
.config("spark.neo4j.bolt.user", "neo4j")
.config("spark.neo4j.bolt.password", "neo4j")
.getOrCreate()
val neo=Neo4j(spark.sparkContext)
val sql="CREATE (a:Person {name: '张三', sex: '男'}) RETURN a"
//测试语句
val rawGraphnode=neo.cypher(sql).loadRowRdd
rawGraphnode.take(10).foreach(println(_))
}
}
}
java也测试过,速度很慢
public class createConn {
/**
* 创建节点并增加属性
*/
public static void createNode(){
Session session = driver.session();
session.run( "CREATE (a:Person {name: {name}, title: {title}})",
parameters( "name", "Arthur001", "title", "King001" ) );
StatementResult result = session.run( "MATCH (a:Person) WHERE a.name = {name} " +
"RETURN a.name AS name, a.title AS title",
parameters( "name", "Arthur001" ) );
while ( result.hasNext())
{
Record record = result.next();
System.out.println( record.get( "title" ).asString() + " " + record.get( "name" ).asString() );
}
session.close();
driver.close();
}
}
- load csv 命令导入
USING PERIODIC COMMIT 300 LOAD CSV WITH HEADERS FROM “file:///test.csv” AS line
MERGE (a:actors{name:line.name,type:line.type,id:line.id})
可变参数解释:
1、USING PERIODIC COMMIT 300
使用自动提交,每满300条提交一次,防止内存溢出
2、WITH HEADERS
从文件中读取第一行作为参数名,只有在使用了该参数后,才可以使用line.name这样的表示方式,否则需使用line[0]的表示方式
3、AS line
为每行数据重命名
4、MERGE
用merge比用create好一点,可以防止数据重复
另一种写法
USING PERIODIC COMMIT 10
LOAD CSV FROM "file:///世界.csv" AS line
create (a:世界{personId:line[0],name:line[1],type:line[2]})
actors.csv放入neo4j安装目录下的import文件夹
- 建立关系
//现有节点创建关系
MATCH (e:person),(cc:class) WHERE cc.id= e.id CREATE (e)-[r:属于]->(cc)
因为从关系型数据库导入的,这里我通过现有的关联id进行建立关系。
其他几种暂时没有用过,因为现阶段需要实时插入。
持续更新。。。