Skip to content

Euler 2.0 数据准备

origin edited this page Aug 16, 2020 · 5 revisions

本章的章节安排如下:

用户需要将自有数据需要转换成Euler-2.0的json数据格式,索引如果不需要可以不用准备。准备好数据之后,使用Euler-2.0提供的数据转换工具,将明文数据转换成二进制数据使用,用于在启动图引擎时快速加载图数据。

图数据模型

Euler支持带权异构属性图。在Euler中,一张图的基本元素是顶点(node)和边(edge)。其中顶点和边都具有类型(type)和权重(weight)。边是有向的,一条边由:起点、终点、类型三者标识,即相同的两点之间可以同时具有多条不同类型的边。

同时,顶点和边都可以拥有属性(feature),Euler将属性分为三种:float、uint64、binary。在算法包中,这三类属性会分别被识别为稠密特征、稀疏特征,和二进制特征。下面是一个简单的例子: image

Euler中的顶点以uint64标识,顶点类型、边类型,以及点边上的三种属性均采用字符串描述。对于例子中的图,我们需要将点边归类编号,得到一张Euler可以识别的图: image

图数据格式

{
  "nodes": [
    {
      "id": 1,
      "type": "train",
      "weight": 1.0,
      "features": [
        {
          "name": "f1",
          "type": "sparse",
          "value": [11, 12]
        },
        {
          "name": "f3",
          "type": "dense",
          "value": [1.1, 1.2]
        },
        {
          "name": "f5",
          "type": "binary",
          "value": "1a"
        }
      ]
    },
    {
      "id": 2,
      "type": 1,
      "weight": 1.0,
      "features": [
        {
          "name": "f1",
          "type": "sparse",
          "value": [21, 22]
        },
        {
          "name": "f3",
          "type": "dense",
          "value": [2.1, 2.2]
        },
        {
          "name": "f5",
          "type": "binary",
          "value": "2a"
        }
      ]
    }
  ]
  
  "edges": [
    {
      "src": 1,
      "dst": 2,
      "type": 0,
      "weight": 2.0,
      "features": [
        {
          "name": "f1",
          "type": "sparse",
          "value": [121, 122]
        },
        {
          "name": "f3",
          "type": "dense",
          "value": [12.1, 12.2]
        },
        {
          "name": "f5",
          "type": "binary",
          "value": "12a"
        }
      ]
    }
  ]
 }

图数据采用JSON格式,JSON文件由两大部分组成,点和边,分别存储在JSON对象的“nodes”、“edges”中。每个节点对象包含了节点的id,type,weight以及属性信息;节点id是uint64类型,type支持string和int类型,最终都会转成string类型。weight是float类型,属性信息中必须有name,type和value字段。name和type是string类型,type为sparse时,value为list(int)类型;type为dense时,value为list(float)类型;type为binary时,value为string类型。每个边对象则包含这个边相关联的起点和终点id:src和dst,和边相关的属性信息。

索引meta文件

参考点和边属性索引

图数据转化

使用build工具生成Euler二进制文件

使用项目根目录下的 euler/tools/gen_partitioned_data.sh 可以将上述的JSON文件转化为Euler加载所需要的二进制文件。使用方法为:

sh gen_partitioned_data.sh graph.json index_meta output_dir shard_num

参数说明:

  • graph.json:明文json格式图数据文件名
  • index_meta:索引meta文件名(如不需要索引功能,文件内容可以为空)
  • output_dir:Euler二进制文件输出目录
  • shard_num:euler二进制分片个数,单机运行可以设置为1

使用python工具生成Euler二进制文件

使用euler python库中的EulerGenerator工具,可以通过python脚本命令将JSON文件转化为Euler加载所需要的二进制文件。使用方法为:

from euler.tools.generate_euler_data import EulerGenerator
convert_dir = "Euler Json文件地址"
convert_meta = "Euler索引文件地址" # 若不需要meta索引,那么convert_meta可以为None
out_dir = "Euler二进制文件输出目录"
partition_num = 1 # Euler二进制文件分片个数
# 创建euler转换工具实例
g = EulerGenerator(convert_dir,
                   convert_meta,
                   out_dir,
                   partition_num)
# 开始转换
g.do()
Clone this wiki locally