16.1.4.1 カンマ区切り値(CSV)

CSV形式はテキスト・ファイル形式で、頂点とエッジが別々のファイルに格納されます。ファイルの各行が頂点またはエッジを表します。頂点キーとラベル、エッジ・キー、出力、入力とラベル、およびアタッチされたプロパティが、ファイル・ヘッダー(最初の行)および構成で指定された順序で格納されます。

V個の頂点のそれぞれにN個の頂点プロパティとK個の近隣があり、E個のエッジにM個のエッジ・プロパティがあるグラフは、CSVでは次のように表されます。

vertices.csv

<V-1>,<VL-1>,<V-1, NP-1>,...,<V-1, NP-N>
<V-2>,<VL-2>,<V-2, NP-1>,...,<V-2, NP-N>
...
<V-V>,<VL-N>,<V-V, NP-1>,...,<V-V, NP-N>
edges.csv

<E-1>,<V-1>,<V-1, VG-1>,<EL-1>,<E-1, EP-1>,...,<E-1, EP-M>
...
<E-K>,<V-1>,<V-1, VG-K>,<EL-N>,<E-K, EP-1>,...,<E-K, EP-M>
<E-K+1>,<V-2>,<V-2, VG-1>,<EL-N+1>,<E-K+1, EP-1>,...,<E-K+1, EP-M>
...
<E-V*K>,<V-V>,<V-V, VG-K>,<EL-V*K>,<E-V*K, EP-1>,...,<E-V*K, EP-M>

例16-1 ヘッダー詳細を含むCSVファイルからのグラフのロード

次の例は、2つの頂点と2つのエッジを含むグラフをロードするためのグラフ構成ファイルを示しています。

vertices.csv

key,integer_prop,string_prop
1,33,"Alice"
2,42,"Bob"
edges.csv

source,dest,integer_prop,string_prop
1,2,0,"baz"
2,2,-12,"bat"

対応するグラフ構成ファイルは次のとおりです。

{
    "format": "csv",
    "header": true,
    "vertex_id_column": "key",
    "edge_source_column": "source",
    "edge_destination_column": "dest",
    "vertex_uris": ["vertices.csv"],
    "edge_uris": ["edges.csv"],
    "vertex_props": [
        {
            "name": "integer_prop",
            "type": "integer"
        },
        {
            "name": "string_prop",
            "type": "string"
        }
    ],
    "edge_props": [
        {
            "name": "integer_prop",
            "type": "integer"
        },
        {
            "name": "string_prop",
            "type": "string"
        }
    ]
}

例16-2 ヘッダー詳細のないCSVファイルからのグラフのロード

次の例は、2つの頂点と2つのエッジを含むグラフをロードするためのグラフ構成ファイルを示しています。

vertices.csv

1,33,"Alice"
2,42,"Bob"
edges.csv

1,2,0,"baz"
2,2,-12,"bat"
対応するグラフ構成ファイルは次のとおりです。

ノート:

列索引が列名のかわりに指定されます。
{
    "format": "csv",
    "header": false,
    "vertex_id_column": 1,
    "edge_source_column": 1,
    "edge_destination_column": 2,
    "vertex_uris": ["vertices.csv"],
    "edge_uris": ["edges.csv"],
    "vertex_props": [
        {
            "name": "integer_prop",
            "type": "integer",
            "column": 2
        },
        {
            "name": "string_prop",
            "type": "string",
            "column": 3
        }
    ],
    "edge_props": [
        {
            "name": "integer_prop",
            "type": "integer",
            "column": 3
        },
        {
            "name": "string_prop",
            "type": "string",
            "column": 4
        }
    ]
}
構成ファイルに列索引が設定されていない場合、列の順序は次のように想定されます。
  • 頂点ファイルの場合: - 頂点ID - 頂点ラベル(存在する場合) - 構成で宣言された順序の頂点プロパティ
  • エッジ・ファイルの場合: - エッジID (存在する場合) - エッジ出力 - エッジ入力 - エッジ・ラベル(存在する場合) - 構成で宣言された順序のエッジ・プロパティ

したがって、前の構成は次と同等です。

{
    "format": "csv",
    "header": false,
    "vertex_uris": ["vertices.csv"],
    "edge_uris": ["edges.csv"],
    "vertex_props": [
        {
            "name": "integer_prop",
            "type": "integer"
        },
        {
            "name": "string_prop",
            "type": "string"
        }
    ],
    "edge_props": [
        {
            "name": "integer_prop",
            "type": "integer"
        },
        {
            "name": "string_prop",
            "type": "string"
        }
    ]
}