neo4j 5.19.0安裝、apoc csv導入導出 及相關問題處理

前言

突然有需求需要用apoc 導入 低版本的圖譜數據,網上資料又比較少,所以就看官網資料并處理了apoc 導入的一些問題。

相關地址

apoc 官方安裝網址??

apoc 官方導出csv 教程地址

apoc 官方 導入 csv 地址

docker 安裝

執行如下命令啟動鏡像

docker run -d  --name neo4j  \-p 7474:7474 -p 7687:7687 \-v /home/neo4j/data:/var/lib/neo4j/data \-v /home/neo4j/plugins:/var/lib/neo4j/plugins \-v /home/neo4j/logs:/var/lib/neo4j/logs \-v /home/neo4j/conf:/var/lib/neo4j/conf \-v /home/neo4j/import:/var/lib/neo4j/import \-e NEO4J_apoc_export_file_enabled=true \-e NEO4J_apoc_import_file_enabled=true \-e NEO4J_apoc_import_file_use__neo4j__config=true \-e NEO4J_AUTH=neo4j/12345678 \neo4j:5.19.0

apoc安裝

如果沒有數據,可以執行下面的語句插入數據,后面導入導出用

CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})
CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})
CREATE (LanaW:Person {name:'Lana Wachowski', born:1965})
CREATE (JoelS:Person {name:'Joel Silver', born:1952})
CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
(LillyW)-[:DIRECTED]->(TheMatrix),
(LanaW)-[:DIRECTED]->(TheMatrix),
(JoelS)-[:PRODUCED]->(TheMatrix);

從apoc 插件地址?下載 apoc-core-5.19.0 的jar,放到 /home/neo4j/plugins

然后編輯? /home/neo4j/conf/neo4j.conf ,添加如下配置

#沒裝成功的時候需要自己配置插件目錄,成功了就不需要
#server.directories.plugins=/var/lib/neo4j/plugins
#下面兩個官方是建議需要什么開放什么,我是直接全開放了
dbms.security.procedures.allowlist=apoc.*
dbms.security.procedures.unrestricted=apoc.*
#網上有出現上下面的配置,但是我不配置也沒影響
#server.jvm.additional=Dapoc.export.file.enabled=true
#server.jvm.additional=Dapoc.import.file.enabled=true
server.directories.import=/var/lib/neo4j/import

此處有個問題:由于我一開始配置的 neo4j 是別人裝的,我將apoc插件放到掛載的 plugins 下,apoc沒裝成功,也沒有錯誤,把我整蒙了,后面是在 stackoverflow 看到有人給了 server.directories.plugins 配置,試著配一下才成功的,主要是沒裝成功也看不到錯誤,排查起來比較費勁。,需要注意下。自己按上面的步驟應該安裝是不需要配置的。

apoc導出

然后執行如下指令導出數據

?CALL?apoc.export.csv.all("movies.csv",?{}) 

如果出現如下界面,表示插件安裝成功,數據導出成功,文件會導出到 /home/neo4j/import

如果出現下面的錯誤,就是要考慮配置 server.directories.plugins?

There is no procedure with the name `apoc.export.csv.all` registered for this database instance. Please ensure you've spelled the procedure name correctly and that the procedure is properly deployed.

apoc導入

打開導出的csv 文件,數據格式如下圖所示

但是我當時用別人配置服務的數據導出的時候,csv內容如下所示,包括別人從3.x的版本導出的數據也是這樣的數據,多出了重復的列名_type,_start_,_end

如果像上面一樣有重復的標簽,就需要自己刪除重復的_type,_start_,_end標簽,否則就會出現如下錯誤

Failed to invoke procedure `apoc.import.csv`: Caused by: java.lang.IllegalStateException: Duplicate key _type (attempted merging values apoc.load.Mapping@45da0937 and apoc.load.Mapping@d89fe8

?然后按如下要求修改movies.csv的內容:

1.將 _id 改成 oldId:ID

2.將?_labels 改為 :LABEL

3.將?_start 改為?oldId:START_ID

4.將?_end 改為 oldId:END_ID

5.將?_type 改為?:TYPE

6.將 _labels 那一列下面的值改成 Movie,Person 用逗號分隔多個標簽,去掉所有冒號

?我在基于上述需求改的時候,不小心把?:LABEL??敲成 :LABELS ,于是出現了如下的錯誤,看的我一臉懵逼

Failed to invoke procedure `apoc.import.csv`: Caused by: org.neo4j.internal.kernel.api.exceptions.schema.IllegalTokenNameException: '' is not a valid token name. Token names cannot be empty or contain any null-bytes.

之后如果基于上面的文件進行直接導入,會出現如下的錯誤,也很莫名其妙

Failed to invoke procedure `apoc.import.csv`: Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap'

這是因為關系和節點都在同一個 csv 里面,需要拆成兩個 csv,一個只有關系,一個只有節點,如下面的圖片所示。

然后這兩個文件都需要放到 /home/neo4j/import 里面

之后執行命令下面的指令(此處 labels type 都不要傳值,這兩個配置是指定本次導入的節點配置的 label 和關系配置的 type,我們需要用的label type 都在 csv 里,不需要自己指定)

CALL apoc.import.csv([{fileName: 'file:/node.csv', labels: []}],[{fileName: 'file:/relationship.csv', type: ''}],{ arrayDelimiter: ','}
)

如下結果表示成功

數據正常導入,原數據的?id?被作為?oldId?被插入到?neo4j?

csv數據修改問題

1.我這個 demo 是因為數據量少,所以直接人工修改,不是很費勁,但是人工修改的時候需要注意編碼問題,有些編輯工具如 excel 修改后再保存,會修改 csv 的編碼,此時導入就會出現亂碼,需要自己通過如 notepad 等其他工作,把編碼改為UTF-8

2.當數據量特別多的時候,手動改就顯得又卡,又難操作了,此時可以考慮參考下面的代碼,然后基于自己的要求調整。(apoc 好像是使用opencsv 解析的,也可以考慮用opencsv)

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.7</version>
</dependency>
try (Reader reader = Files.newBufferedReader(Paths.get("movies.csv"))) {CSVPrinter csvPrinter = null;boolean isFirst = true;Iterable<CSVRecord> records = CSVFormat.DEFAULT.parse(reader);int recordIndex = 0;for (CSVRecord record : records) {recordIndex++;if (isFirst) {isFirst = false;List<String> heads = Lists.newArrayList();int index = 0;for (String s : record) {index++;heads.add(s);}csvPrinter = new CSVPrinter(Files.newBufferedWriter(new File("gen.csv").toPath(),StandardOpenOption.CREATE, StandardOpenOption.WRITE), CSVFormat.DEFAULT.withHeader(heads.toArray(new String[heads.size()])));continue;}List<String> bodys = Lists.newArrayList();int index = 0;for (String s : record) {if (index == 1) {s = s.replaceAll(":", ";").replaceFirst(":", "");}index++;bodys.add(s);}csvPrinter.printRecord(bodys.toArray(new String[bodys.size()]));csvPrinter.flush();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83475.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83475.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83475.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

macos常見且應該避免被覆蓋的系統環境變量(避免用 USERNAME 作為你的自定義變量名)

文章目錄 macos避免用 USERNAME 作為你的自定義變量名macos常見且應該避免被覆蓋的系統環境變量 macos避免用 USERNAME 作為你的自定義變量名 問題&#xff1a; 你執行了&#xff1a;export USERNAME“admin” 然后執行&#xff1a;echo ${USERNAME} 輸出卻是&#xff1a;xxx …

Python訓練打卡Day41

簡單CNN 知識回顧 數據增強卷積神經網絡定義的寫法batch歸一化&#xff1a;調整一個批次的分布&#xff0c;常用與圖像數據特征圖&#xff1a;只有卷積操作輸出的才叫特征圖調度器&#xff1a;直接修改基礎學習率 卷積操作常見流程如下&#xff1a; 1. 輸入 → 卷積層 → Batch…

【親測有效】Mybatis-Plus中更新字段為null

Mybatis-Plus中更新字段為null 遇到問題 Mybatis-Plus更新的默認行為如下: Mybatis-Plus默認如果某個字段為null, 默認不更新這個字段, 例如有個Double類型的字段, 當前數據庫數據為10, 然后傳參時當前字段為null, 實際上Mybatis-Plus是不會覆蓋該字段為null的 在傳參的時候如…

如何使用插件和子主題添加WordPress自定義CSS(附:常見錯誤)

您是否曾經想更改網站外觀的某些方面&#xff0c;但不知道怎么做&#xff1f;有一個解決方案——您可以將自定義 CSS&#xff08;層疊樣式表&#xff09;添加到您的WordPress網站&#xff01; 在本文中&#xff0c;我們將討論您需要了解的有關CSS的所有知識以及如何使用它來修…

左值引用和右值引用

一、基本概念 左值&#xff08;lvalue&#xff09;和右值&#xff08;rvalue&#xff09; 左值指的是有確定存儲位置&#xff08;地址&#xff09;的對象&#xff0c;通常可以出現在賦值語句左側。例如&#xff1a;變量名、解引用指針得到的對象、數組元素等都屬于左值。 右值…

django入門-orm數據庫操作

一&#xff1a;下載數據庫依賴項mysqlclient pip install mysqlclient 二&#xff1a;django配置文件配置數據庫鏈接 路徑&#xff1a;mysite2\mysite2\settings.py DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: data, # 數據庫名稱USER: root, …

國標GB28181設備管理軟件EasyGBS視頻平臺筑牢文物保護安全防線創新方案

一、方案背景? 文物作為人類文明的珍貴載體&#xff0c;具有不可再生性。當前&#xff0c;盜竊破壞、游客不文明行為及自然侵蝕威脅文物安全&#xff0c;傳統保護手段存在響應滯后、覆蓋不全等局限。隨著5G與信息技術發展&#xff0c;基于GB28181協議的EasyGBS視頻云平臺&…

NetSuite Bundle - Dashboard Refresh

兒童節快樂&#xff01; 今朝發一個Bundle&#xff0c;解決一個NetSuite Dashboard的老問題。出于性能上的考慮&#xff0c;NetSuite的Dashboard中的Portlet&#xff0c;只能逐一手工刷新。有人基于瀏覽器做了插件&#xff0c;可以進行自動刷新。但是在我們做項目部署時&#…

<PLC><socket><西門子>基于西門子S7-1200PLC,實現手機與PLC通訊(通過websocket轉接)

前言 本系列是關于PLC相關的博文,包括PLC編程、PLC與上位機通訊、PLC與下位驅動、儀器儀表等通訊、PLC指令解析等相關內容。 PLC品牌包括但不限于西門子、三菱等國外品牌,匯川、信捷等國內品牌。 除了PLC為主要內容外,PLC相關元器件如觸摸屏(HMI)、交換機等工控產品,如…

【AI論文】推理語言模型的強化學習熵機制

摘要&#xff1a;本文旨在克服將強化學習擴展到使用 LLM 進行推理的主要障礙&#xff0c;即策略熵的崩潰。 這種現象在沒有熵干預的RL運行中一直存在&#xff0c;其中策略熵在早期訓練階段急劇下降&#xff0c;這種探索能力的減弱總是伴隨著策略性能的飽和。 在實踐中&#xff…

手動刪除網頁上的禁止復制事件

以Edge瀏覽器為環境、以網絡上一個文檔為例。 右擊頁面&#xff0c;打開【檢查】工具。選擇元素&#xff0c;打開【事件偵聽器】&#xff1a; 展開copy&#xff0c;刪除里面的事件&#xff1a; 選中文字&#xff0c;進行復制

element級聯地址選擇器

一、實現過程總覽 組件替換&#xff1a;將原有的輸入框&#xff08;el-input&#xff09;替換為級聯選擇器&#xff08;el-cascader&#xff09;&#xff0c;并配置基礎屬性。數據適配&#xff1a;引入 JSON 地址數據&#xff0c;通過cascaderProps映射數據字段&#xff08;如…

【leetcode-兩數之和】

一、題目 二、題解 &#xff08;1&#xff09;雙指針 這里要注意j<length的 //聲明兩個指針int length nums.length;for (int i 0; i < length; i) {for (int j i 1; j<length;j){if (j<length && nums[i]nums[j]target){return new int[]{i,j};}}}r…

CLion社區免費后,使用CLion開發STM32相關工具資源匯總與入門教程

Clion下載與配置 Clion推出社區免費&#xff0c;就是需要注冊一個賬號使用&#xff0c;大家就不用去找破解版版本了&#xff0c;jetbrains家的IDEA用過的都說好&#xff0c;這里嵌入式領域也推薦使用。 CLion官網下載地址 安裝沒有什么特別&#xff0c;下一步就好。 啟動登錄…

Rust 學習筆記:關于 Cargo 的練習題

Rust 學習筆記&#xff1a;關于 Cargo 的練習題 Rust 學習筆記&#xff1a;關于 Cargo 的練習題問題一問題二問題三問題四問題五問題六問題七 Rust 學習筆記&#xff1a;關于 Cargo 的練習題 參考視頻&#xff1a; https://www.bilibili.com/video/BV1xjAaeAEUzhttps://www.b…

高速收發器

一、高速收發器 1.FPGA高速收發器&#xff1a;GTP,GTX,GTH,GTZ 2.每個Quad有4對高速收發器GT(4個TX和4個RX)和一個COmmon 3.走差分&#xff0c;提高抗干擾性 4.CPLL是每個lane私有的&#xff0c;QPLL是整個Quad的所有通道共享的 5.每個MGT的bank有兩對差分參考時鐘 6.CPLL的時鐘…

Rust 變量與可變性

文章目錄 變量與可變性常量遮蔽&#xff08;Shadowing&#xff09; 變量與可變性 Rust中變量默認是不可變的&#xff0c;這是 Rust 鼓勵你編寫更安全、易于并發代碼的眾多方式之一。不過&#xff0c;你仍然可以選擇讓變量可變。讓我們來探討 Rust 為什么鼓勵你優先使用不可變性…

sourcetree無法獲取遠程所有的tag

2025年5月29日11:30:17 sourcetree widnwos v3.4.23版本 突然發現線上的代碼庫里有很多新打的tag&#xff0c;但是sourcetree死活無法拉去所有的tag&#xff0c;嘗試卸載重新安裝也不行&#xff0c;全網也找了還是不知道&#xff0c;但是mac版本好像沒有這個問題 方法1&…

《深度探索C++對象模型》閱讀筆記(完整版)

《深度探索C對象模型》閱讀筆記&#xff08;完整版&#xff09; 文章目錄 《深度探索C對象模型》閱讀筆記&#xff08;完整版&#xff09;1. 關于對象&#xff08;Object Lessons&#xff09;1.1 C對象模型&#xff08;The C Object Model&#xff09;1.1.1 語言中的對象模型1.…

從Docker拉取鏡像一直失敗超時解決辦法

項目場景&#xff1a; 在ubuntu中&#xff0c;使用docker拉去鏡像時&#xff0c;一直超時&#xff0c;拉去失敗。 問題描述 原因分析&#xff1a; 國外服務器網絡不好導致。 解決方案&#xff1a; 解決方案1 設置國內源 我這邊測試&#xff0c;更改以后仍然失敗 阿里云提供…