Reputation: 1940
I am trying to dynamically upload node from csv file into neo4j graphdb. So I am developing a script. Here is my code
def CreateNodes(filename,label):
print(filename,label)
print(type(filename),type(label))
path=nodesourcefolder+filename
print(path)
#filestring=nodesourcefolder+filename
if(isfile(path)==True):
print("valid")
#nodequery="""CALL apoc.periodic.iterate('CALL apoc.load.csv(%s) yield map as row return row','CREATE (p:%s) SET p = row', {batchSize:10000, iterateList:true, parallel:true})"""%(path,label)
nodequery="""CALL apoc.periodic.iterate('CALL apoc.load.csv("""+path+""") yield map as row return row','CREATE (p:"""+label+""") SET p = row', {batchSize:10000, iterateList:true, parallel:true})"""
print(nodequery)
return nodequery
query=CreateNodes("test.csv","myNode")
graphdriver.run(query)
the query variable gives me the value test.csv MyNode
out put
<class 'str'> <class 'str'>
/Users/kalyan.admin/NEO4J_HOME/import/test.csv
valid
CALL apoc.periodic.iterate('CALL apoc.load.csv(/Users/kalyan.admin/NEO4J_HOME/import/test.csv) yield map as row return row','CREATE (p:myNode) SET p = row', {batchSize:10000, iterateList:true, parallel:true})
when I am going to run graph driver.run(query)
I am getting bellow error
**ProcedureCallFailed: Failed to invoke procedure `apoc.periodic.iterate`: Caused by: org.neo4j.cypher.internal.v3_5.util.SyntaxException: Invalid input 'U': expected '*' or '/' (line 1, column 44 (offset: 43))**
I have already getting a string file path name and label value when I am going to pass filename, label name into Createnode Function. But my graph driver is not working to create nodes
Kindly help me to sort this out. I have tried two node query operation one of them is now commented out but all those query gives me the same result after running Graphdriver
Upvotes: 0
Views: 1830
Reputation: 7458
You have a syntax issue on your cypher query, the path of the file should be a string.
This is not valid :
CALL apoc.periodic.iterate(
'CALL apoc.load.csv(/Users/kalyan.admin/NEO4J_HOME/import/test.csv) yield map as row return row',
'CREATE (p:myNode) SET p = row',
{batchSize:10000, iterateList:true, parallel:true}
)
Whereas this is (note the double quotes around the path) :
CALL apoc.periodic.iterate(
'CALL apoc.load.csv("/Users/kalyan.admin/NEO4J_HOME/import/test.csv") yield map as row return row',
'CREATE (p:myNode) SET p = row',
{batchSize:10000, iterateList:true, parallel:true}
)
Upvotes: 1