目前 GraphScope 發(fā)布了 graphscope-notebook 插件,通過交互式的方式幫助用戶在 Jupyterlab 環(huán)境下完成圖數(shù)據(jù)的構(gòu)建和載入操作,極大地降低了載圖的復雜度和出錯率。本文將詳細介紹該插件的使用流程。
背景
對于任何一款圖計算產(chǎn)品而言,圖數(shù)據(jù)的載入操作往往是第一步,同時也是比較重要且十分復雜的一步,這其中主要的原因是圖數(shù)據(jù)本身的復雜性。因此,為了提升用戶的載圖體驗,GraphScope 內(nèi)置了多種數(shù)據(jù)集,例如對于 TinkerPop Modorn Graph 圖而言,用戶只需要一條語句即可完成載圖操作:
from graphscope.dataset import load_modern_graph
modern_graph = load_modern_graph()
然而,對于用戶自定義的數(shù)據(jù)集來說,載圖過程卻需要定義一段很長的代碼,我們以 ogbn-mag 這張屬性圖為例:

圖中包含了 4 種類型的頂點和 4 種類型的邊,其中每種邊都有一個標簽(label),并且邊兩端頂點的標簽也是固定的,通常每種類型的頂點、邊都對應(yīng)一個 csv 數(shù)據(jù)文件。
$ tree
├── author_affiliated_with_institution.csv
├── author.csv
├── author_writes_paper.csv
├── field_of_study.csv
├── institution.csv
├── paper_cites_paper.csv
├── paper.csv
└── paper_has_topic_field_of_study.csv
最終對于用戶而言,GraphScope 需要的實際載圖語句如下:

我們可以看到,即便是對于 Python 這樣一門高層的語言,針對上述含有 4 種 label 的屬性圖,其 Schema 的定義代碼也是十分復雜的,更何況動輒上百種 label 的頂點、邊,甚至每種頂點、邊又包含上千種的屬性。
因此,為降低用戶載圖過程中的復雜度和出錯率,GraphScope 開發(fā)了一款 graphscope-notebook 插件,該插件可通過交互式的方式,幫助 GraphScope 用戶在 Jupyterlab 環(huán)境下完成復雜圖數(shù)據(jù)的載入流程。目前,插件已經(jīng)部署在 GraphScope Playground 環(huán)境,歡迎大家試用。
接下來,本文將以這張屬性圖為例,詳細介紹如何在 Jupyterlab 環(huán)境下交互式地完成圖數(shù)據(jù)的載入流程。
安裝插件
插件的使用需要滿足如下條件:
- JupyterLab >= 3.0
- GraphScope >= 0.12.0
你可通過如下命令安裝插件:
pip3 install graphscope-notebook
需要注意的是,插件安裝完成后,需要重新啟動 Jupyterlab,最終若左側(cè)邊欄顯示如下,則代表安裝成功;如果安裝失敗,可在 GraphScope 社區(qū)反饋遇到的問題。

使用插件
首先,我們在 Jupyterlab Notebook 中執(zhí)行如下代碼,創(chuàng)建一個 GraphScope Session.
import graphscope
graphscope.set_option(show_log=True)
sess = graphscope.session(cluster_type="hosts")
Session 創(chuàng)建完成后,我們便可以在左側(cè)資源欄目監(jiān)控到該資源,如圖所示,點擊 "+" 按鈕,即可在 Notebook 的右側(cè)打開交互頁面:

1. 創(chuàng)建頂點
接下來我們便可以根據(jù)交互頁面的提示完成圖數(shù)據(jù)頂點的構(gòu)建,以 "paper" 類型的頂點為例,創(chuàng)建頂點頁面如下,信息填寫完成后,點擊 "Create Vertex" 即可完成頂點的構(gòu)建。

其中,各字段解釋如下:
| 字段 | 解釋 |
|---|---|
| Label | 頂點標簽(label) |
| Data Source | Local File 代表本地數(shù)據(jù)文件; Online File 代表網(wǎng)絡(luò)文件,例如 OSS 等 |
| Location | 數(shù)據(jù)源路徑 |
| Header Row | 如果為 true,則列名將從源文件的第一行讀取 |
| Delimiter | 數(shù)據(jù)分隔符,可選值為空格、","、 ";" 和 "\t" |
| Extra Params | 數(shù)據(jù)載入需要的額外參數(shù),例如 OSS Key, Secret 和 Endpoint |
| ID Field | 源文件中選擇哪一列作為點的 ID,可以是數(shù)字類型的編號如0,1,2,也可以是string類型的名字 |
| Select all Properties | 如果為 true,則載入全部屬性,否則需要指定載入的屬性 |
2. 創(chuàng)建邊
同"創(chuàng)建頂點"一樣,以 "cites" 類型的邊為例 (paper -> cites -> paper),創(chuàng)建邊的頁面如下,信息填寫完成后,點擊 "Create Edge" 即可完成邊的構(gòu)建。

其中,不同于頂點的字段解釋如下:
| 字段 | 解釋 |
|---|---|
| Edge Only | 如果為 true,則代表該邊不與任何其他頂點文件相關(guān)聯(lián),適用于只有一個邊文件,而沒有頂點文件的情況 |
| Src Vertex Label | 源頂點的標簽(label) |
| Dst Vertex Label | 目標頂點的標簽(label) |
| Src Vertex Field | 源文件中哪一列作為源頂點的 ID,可以是數(shù)字類型的編號如0,1,2,也可以是string類型的名字 |
| Dst Vertex Field | 源文件中哪一列作為目標頂點的 ID,可以是數(shù)字類型的編號如0,1,2,也可以是string類型的名字 |
3. 定義圖相關(guān)信息

所有類型的頂點/邊構(gòu)建完成后,我們填寫圖相關(guān)的信息,其中相應(yīng)字段解釋如下:
| 字段 | 解釋 |
|---|---|
| Name | 圖名字 |
| OID Type | 圖原始點類型,可選值為 "string" 和 "int64" |
| Directed | 是否為有向圖 |
| Generate EID | 是否為每條邊生成唯一的id,如果需要使用 GIE 圖查詢服務(wù),則設(shè)置為 True |
4. 生成載圖語句,完成數(shù)據(jù)載入
信息填寫完成后,鼠標選中 "Notebook Cell",點擊交互頁面的 "Generate Code" 按鈕,即可生成對應(yīng)的載圖語句,執(zhí)行該語句便可完成圖數(shù)據(jù)的載入操作,最終我們可以在左側(cè)資源欄目監(jiān)控到對應(yīng)的圖資源:

至此,我們已經(jīng)成功使用 graphscope-notebook 插件完成了圖數(shù)據(jù)的載入流程,接下來,便可以參考 GraphScope 文檔 在載好的圖上執(zhí)行相應(yīng)的圖計算任務(wù)。
結(jié)語
graphscope-notebook 作為一款 GraphScope 適用于 Jupyterlab 環(huán)境下的插件,目前具備 1) 監(jiān)控 GraphScope 運行時資源; 2) 交互式圖數(shù)據(jù)構(gòu)建等功能,可極大地降低載圖過程中的復雜度和出錯率。除此之外,我們也計劃在后續(xù)的版本中增加圖數(shù)據(jù)的交互式挖掘、可視化分析等相關(guān)功能,歡迎大家關(guān)注 GraphScope。