使用java将数据从Neo4j导出到csv
将数据从Neo4j导出到CSV的最佳方法是什么?我在链接中使用CSV导入器将数据从CSV导入到Neo4j 我对数据执行了一些操作,我想将查询结果返回到csv中,有人能给我建议解决方案吗使用java将数据从Neo4j导出到csv,neo4j,Neo4j,将数据从Neo4j导出到CSV的最佳方法是什么?我在链接中使用CSV导入器将数据从CSV导入到Neo4j 我对数据执行了一些操作,我想将查询结果返回到csv中,有人能给我建议解决方案吗 iam使用neo4j 1.9.3和java 1.6执行以下操作Groovy中的一小段代码: @Grab(group="org.neo4j", module="neo4j-cypher", version="1.9") @Grab(group='net.sf.opencsv', module='opencsv',
iam使用neo4j 1.9.3和java 1.6执行以下操作
Groovy
中的一小段代码:
@Grab(group="org.neo4j", module="neo4j-cypher", version="1.9")
@Grab(group='net.sf.opencsv', module='opencsv', version='2.3')
import org.neo4j.kernel.EmbeddedGraphDatabase
import org.neo4j.cypher.javacompat.ExecutionEngine
import au.com.bytecode.opencsv.CSVWriter
assert args, "specify location of graph.db and cypher statement"
def db = new org.neo4j.kernel.EmbeddedGraphDatabase(args[0])
def ee = new ExecutionEngine(db)
def result = ee.execute(args[1])
def columns = result.columns()
System.out.withWriter { writer ->
CSVWriter csv = new CSVWriter(writer)
csv.writeNext(columns as String[])
for (def row in result) {
def values = columns.collect {row[it]}
csv.writeNext(values as String[])
}
}
db.shutdown()
当然,
opencsv
也可以在纯Java环境中使用。Groovy
中的一个简短片段,用于:
@Grab(group="org.neo4j", module="neo4j-cypher", version="1.9")
@Grab(group='net.sf.opencsv', module='opencsv', version='2.3')
import org.neo4j.kernel.EmbeddedGraphDatabase
import org.neo4j.cypher.javacompat.ExecutionEngine
import au.com.bytecode.opencsv.CSVWriter
assert args, "specify location of graph.db and cypher statement"
def db = new org.neo4j.kernel.EmbeddedGraphDatabase(args[0])
def ee = new ExecutionEngine(db)
def result = ee.execute(args[1])
def columns = result.columns()
System.out.withWriter { writer ->
CSVWriter csv = new CSVWriter(writer)
csv.writeNext(columns as String[])
for (def row in result) {
def values = columns.collect {row[it]}
csv.writeNext(values as String[])
}
}
db.shutdown()
当然,
opencsv
也可以在纯Java环境中使用。由于您已经有了ID,您可以使用cypher以块(共5块)的形式获取ID及其fwd关系,csv分隔符为“|”
使用neo4j外壳进行测试
语法:neo4j shellSTART n=node(1,2,3,4,5) return ID(n),n.name?,n.property?;
START n=node(6,7,8,9,10) return ID(n),n.name?,n.property?;
....
START n=node(1,2,3,4,5) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?;
START n=node(6,7,8,9,10) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?;
....
reln的填充看起来像
START n=node(1,2,3,4,5) return ID(n),n.name?,n.property?;
START n=node(6,7,8,9,10) return ID(n),n.name?,n.property?;
....
START n=node(1,2,3,4,5) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?;
START n=node(6,7,8,9,10) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?;
....
要在Java API中执行相同的操作,只需在for循环中运行相同的操作。由于您已经有了ID,您可以使用cypher以块(共5块)的形式获取ID及其fwd关系,csv分隔符为“|” 使用neo4j外壳进行测试 语法:neo4j shell
START n=node(1,2,3,4,5) return ID(n),n.name?,n.property?;
START n=node(6,7,8,9,10) return ID(n),n.name?,n.property?;
....
START n=node(1,2,3,4,5) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?;
START n=node(6,7,8,9,10) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?;
....
reln的填充看起来像
START n=node(1,2,3,4,5) return ID(n),n.name?,n.property?;
START n=node(6,7,8,9,10) return ID(n),n.name?,n.property?;
....
START n=node(1,2,3,4,5) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?;
START n=node(6,7,8,9,10) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?;
....
要在Java API中执行相同的操作,只需在for循环中运行相同的操作。我想您想要单独的节点和关系csv文件吗?我不知道最好的方法..在单独的文件中获取节点和关系是最好的..对不起,我的错。忽略我的问题,我看错了。@Luane java有什么方法吗?@Luane或其他任何方法..我想你想要单独的节点和关系csv文件吗?我不知道最好的方法..在单独的文件中获取节点和关系是最好的..对不起,我的错。忽略我的问题,我读错了。@Luane有没有办法使用java?@Luane或其他任何方式?。谢谢回复Stefan..但是有没有办法使用java..因为我已经使用了java。你可以很容易地将上面的代码片段转换为普通的旧java-应该很容易。谢谢回复Stefan..但是有没有办法使用java..因为我已经使用了java。你可以很容易地转换上面的代码片段是简单的旧java-应该很容易。