2017-11-14 4 views
0

スカラーコードからneo4jにCSVファイルをロードしてグラフを作成しようとしています。csvファイルをneo4jにロードするためにscalaから定期的にコミットする方法は?

私は定期的に、次のエラーが発生しているコミットを使用しています:

Exception in thread "main" org.neo4j.driver.v1.exceptions.ClientException: 
Executing queries that use periodic commit in an open transaction is not possible. 

私はこのエラーを取得し、それを回避する方法なぜ上の任意の助けを?私は100kノードをロードするので定期的なコミットを使用しています。定期的なコミットの代替手段はありますか?

コード:取引上の

def createGraph(createStmt: ArrayBuffer[String]): Unit = { 
val session = driver.session() 
val greeting: String = session.writeTransaction(new TransactionWork[String]() { 
    override def execute(transaction: Transaction): String = { 
    var result1: StatementResult = transaction.run("USING PERIODIC COMMIT\n"+ 
                "LOAD CSV WITH HEADERS FROM \"file:///path/to/file.csv\" AS csvLine\n"+ 
                "CREATE (p:Person {id: toInt(csvLine.id), name: csvLine.name})") 

    "Graph Created" 
    } 
}) 

}

+1

[ドライバドキュメント](https://neo4j.com/docs/developer-manual/current/drivers/sessions-transactions/#driver-transactions-auto-commit)では、「自動コミットトランザクションはUSING PERIODIC COMMIT Cypher文を実行する唯一の方法です。自動コミットは新しいトランザクションを開始せずに 'session.run(...)'として実行されます。 –

+0

ありがとうございます。それが助けになりました。 – vinayawsm

+0

素晴らしい!私のコメントに基づいて、私はあなたがそれを受け入れ、そして/またはupvoteするように答えを作成しました。 –

答えて

1

driver docsは、 "オートコミットのトランザクションが周期的にサイファーCOMMIT文を使用した実行するための唯一の方法である。" という状態を示唆します

自動コミットは、session.writeTransaction(...で新しいトランザクションを開始せずに、session.run(...)として実行されます。

関連する問題