Как импортировать большой набор данных в Neo4j с помощью отношений, определенных в CSV - PullRequest
1 голос
/ 31 января 2020

Проблема: Как эффективно загрузить в Neo4j ~ 8 ГБ данных,> 10 миллионов строк следующего формата. Я использую набор данных DocGraph, который показывает отношения между поставщиками Medicare. Набор данных - это CSV со столбцами:

From_ID, To_ID, Count_Patients, Count_Transacts, Avg_Wait, Stdv_Wait

From_ID означает идентификатор врача, делающего направление. To_ID - это врач, который получает направление. Последние четыре столбца являются свойствами отношений. Любой идентификатор в первом или втором столбце может появиться в любом столбце, поскольку поставщики могут иметь много связей в любом направлении.

Вот базовый запрос c, который я придумал (очень новый для Cypher, но adept at SQL):

LOAD CSV FROM "url"
CREATE (n:provider {NPI : line[0]}) 
WITH line, n 
MERGE (m:provider {NPI : line[1]}) 
WITH m,n, line 
MERGE (n)-[r:REFERRED {patients: line[2], transacts: line[3], avgdays: line[4], stdvdays: line[5]}]->(m)

Кажется, что он работает с небольшим подмножеством данных, но в прошлый раз, когда я пробовал его на полном наборе данных, он сломал мой neo4j, и он продолжал истекать, когда я пытался перезапустить поэтому мне пришлось прекратить работу моего экземпляра EC2 и начать с нуля.

Благодарим за любые советы и помощь в запросе Cypher. Кроме того, я планирую объединить эти данные с дополнительными данными Medicare с дополнительными свойствами об узлах, например, специальность врача, местоположение, имя и т. Д. c, поэтому дайте мне знать, как мне следует это учитывать.

Подробности экземпляра: Ubuntu 18.04, m5ad.large (2 vCPUS, 8 ГБ ОЗУ, 75 ГБ SSD)

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Кажется очень вероятным, что ваша логика c имеет недостатки.

Вам следует выяснить, может ли несколько строк в вашем CSV-файле иметь одинаковое значение line[0]. В таком случае ваше предложение CREATE должно быть изменено на MERGE, чтобы избежать создания потенциально большого количества дублирующихся provider узлов (и, следовательно, также дублирующих :REFERRED отношений).

0 голосов
/ 31 января 2020

Пытались ли вы использовать

USING PERIODIC COMMIT 1000 ......

ИСПОЛЬЗОВАНИЕ PERIODI C COMMIT 1000 ЗАГРУЗИТЬ CSV ИЗ CREATE "url" (n: provider {NPI: line [0]}) WITH строка, n MERGE (m: поставщик {NPI: строка [1]}) С m, n, строка MERGE (n) - [r: REFERRED {пациенты: строка [2], транзакции: строка [3], средние дни: строка [4] , stdvdays: строка [5]}] -> (m)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...