上下文

上下文对象

class graphscope.framework.context.BaseContextDAGNode(bound_app, graph, *args, **kwargs)[源代码]

具体上下文DAG节点的基类。

在GraphScope中,评估应用后将返回具体类ContextDAGNode的实例,该实例会在eager模式下通过Session.run()自动执行,并返回graphscope.framework.context.Context的实例

We can further use the handle to retrieve data:
  • 作为 numpy.ndarray 数组 (to_numpy()),

  • 作为 pandas.DataFrame(to_dataframe()),

  • 作为 vineyard 张量(to_vineyard_tensor()),

  • 或者作为vineyard数据框(to_vineyard_dataframe())。

以下示例展示了其用法:

>>> # lazy mode
>>> import graphscope
>>> from graphscope.dataset import load_p2p_network
>>> sess = graphscope.session(cluster_type="hosts", mode="lazy")
>>> g = load_p2p_network(sess)
>>> sg = g.project(vertices={"host": ["id"]}, edges={"connect": ["dist"]})
>>> c = graphscope.sssp(sg, 20)
>>> print(c) # <graphscope.framework.context.VertexDataContextDAGNode>
>>> r1 = c.to_numpy("r")
>>> print(r1) # <graphscope.framework.context.ResultDAGNode>
>>> r2 = c.to_dataframe({"id": "v.id", "result": "r"})
>>> r3 = c.to_vineyard_tensor("r")
>>> r4 = c.to_vineyard_dataframe({"id": "v.id", "result": "r"})
>>> r = sess.run([r1, r2, r3, r4])
>>> r[0].shape
(62586,)
>>> r[1].shape
(62586, 2)
>>> r[2] # return an object id
>>> r[3] # return an object id

>>> # eager mode
>>> import graphscope
>>> from graphscope.dataset import load_p2p_network
>>> sess = graphscope.session(cluster_type="hosts", mode="eager")
>>> g = load_p2p_network(sess)
>>> sg = g.project(vertices={"host": ["id"]}, edges={"connect": ["dist"]})
>>> c = sssp(sg, 20)
>>> print(c) # <graphscope.framework.context.Context>
>>> r1 = c.to_numpy("r")
>>> r1.shape
(62586,)
>>> r2 = c.to_dataframe({"id": "v.id", "result": "r"})
>>> r2.shape
(62586, 2)
>>> r3 = c.to_vineyard_tensor() # return an object id
>>> r4 = c.to_vineyard_dataframe() # return an object id
to_dataframe(selector, vertex_range=None)[源代码]

将上下文数据作为pandas DataFrame获取。

Parameters:
  • selector – dict 键是数据框中的列名,值描述了如何选择上下文的值。更多详情请参阅派生上下文DAG节点类。

  • vertex_range – dict, 可选参数, 默认为 None。 用作切片功能。表达式 {'begin': m, 'end': n} 会选取从 m 到但不包括 n 的顶点范围。mn 的类型必须与顶点oid类型一致。 只会获取顶点数据的子范围。 请注意这里的比较不是基于数字顺序,而是基于字母顺序。

Returns:

结果包含在即时模式下评估的pandas.DataFrame

Return type:

graphscope.framework.context.ResultDAGNode

to_numpy(selector, vertex_range=None, axis=0)[源代码]

将上下文数据作为numpy数组获取。

Parameters:
  • selector (str) - 描述如何选择上下文的值。更多详情请参阅派生的上下文DAG节点类。

  • vertex_range (dict) – 可选参数,默认为None。 用作切片功能。表达式{'begin': m, 'end': n}会选取从m开始到但不包括n的顶点部分。mn的类型必须与顶点oid类型相同。 省略起始索引表示从顶点开头开始切片,省略结束索引表示切片延伸到顶点末尾。 请注意这里的比较不是基于数字顺序,而是基于字母顺序。

  • axis (int) – 可选参数,默认为0。

Returns:

结果包含在即时执行模式下评估的numpy.ndarray

Return type:

graphscope.framework.context.ResultDAGNode

to_vineyard_dataframe(selector=None, vertex_range=None)[源代码]

获取上下文数据作为vineyard数据框并返回vineyard对象ID。

Parameters:
  • selector – dict 键(key)用作数据框的列名,值(value)描述如何从上下文中选取数值。更多细节请参阅派生上下文DAG节点类。

  • vertex_range – dict, 可选参数, 默认为 None 用作切片功能。表达式 {'begin': m, 'end': n} 会选取从 m 到但不包括 n 的顶点子集。mn 的类型必须与顶点oid类型一致。 只有该子范围内的顶点数据会被获取。

Returns:

结果保存了vineyard数据框的对象ID,以即时模式评估。

Return type:

graphscope.framework.context.ResultDAGNode

to_vineyard_tensor(selector=None, vertex_range=None, axis=0)[源代码]

获取上下文数据作为vineyard张量并返回vineyard对象ID。

Returns:

结果保存了vineyard张量的对象ID,以即时模式评估。

Return type:

graphscope.framework.context.ResultDAGNode

class graphscope.framework.context.TensorContextDAGNode(bound_app, graph, *args, **kwargs)[源代码]

张量上下文DAG节点持有一个张量。 在考虑TensorContext时,只有轴是有意义的。

class graphscope.framework.context.VertexDataContextDAGNode(bound_app, graph, *args, **kwargs)[源代码]

最简单的一种上下文。 顶点有一个单一的值作为结果。

  • The syntax of selector on vertex is:
    • v.id: 获取顶点的ID

    • v.data: 获取顶点数据

      如果有的话,表示图上的原始数据,而非计算结果。

  • The syntax of selector of edge is (not supported yet):
    • e.src: 获取边的源ID

    • e.dst: 获取边的目标顶点ID

    • e.data: 获取边上的边数据

      如果有的话,表示图上的原始数据

  • The syntax of selector of results is:
    • r: 获取算法查询结果。例如执行PageRank后顶点的排名。

class graphscope.framework.context.LabeledVertexDataContextDAGNode(bound_app, graph, *args, **kwargs)[源代码]

带标签类型的上下文。 该上下文包含多个顶点标签和边标签,每个标签都有若干属性。 选择操作首先在标签上进行,然后在属性上进行。

我们使用:来过滤标签,使用.来选择属性。结果不包含属性,仅包含标签。

  • The syntax of selector of vertex is:
    • v:label_name.id: 获取属于特定顶点标签的ID。

    • v:label_name.property_name: 获取特定顶点标签上特定属性的数据。

  • The syntax of selector of edge is (not supported yet):
    • e:label_name.src: 获取特定边标签的源ID。

    • e:label_name.dst: 获取指定边标签的目标ID。

    • e:label_name.property_name: 获取特定边标签的特定属性数据。

  • The syntax of selector of results is:
    • r:label_name: 获取顶点标签的结果数据。

class graphscope.framework.context.VertexPropertyContextDAGNode(bound_app, graph, *args, **kwargs)[源代码]

带有属性的简单上下文类型。 一个顶点可以有多个值(也称为属性)作为结果。

  • The syntax of selector on vertex is:
    • v.id: 获取顶点的ID

    • v.data: 获取顶点数据

      如果有的话,表示图上的原始数据,而非计算结果

    • v.label_id: 获取每个顶点的标签ID。

  • The syntax of selector of edge is (not supported yet):
    • e.src: 获取边的源ID

    • e.dst: 获取边的目标顶点ID

    • e.data: 获取边上的边数据

      如果有的话,表示图上的原始数据

  • The syntax of selector of results is:
    • r.column_name: 获取结果中名为column_name的属性。

      例如:在graphscope.hits()中的r.hub

class graphscope.framework.context.LabeledVertexPropertyContextDAGNode(bound_app, graph, *args, **kwargs)[源代码]

带有属性的标签类型上下文。 该上下文包含多个顶点标签和边标签,每个标签都有若干属性。 选择操作首先在标签上执行,然后在属性上执行。

我们使用:来过滤标签,使用.来选择属性。 结果可以包含多个属性。

  • The syntax of selector of vertex is:
    • v:label_name.id: 获取属于特定顶点标签的ID。

    • v:label_name.property_name: 获取特定顶点标签上特定属性的数据。

  • The syntax of selector of edge is (not supported yet):
    • e:label_name.src: 获取特定边标签的源ID。

    • e:label_name.dst: 获取特定边标签的目标ID。

    • e:label_name.property_name: 获取特定边标签的特定属性数据。

  • The syntax of selector of results is:
    • r:label_name.column_name: 获取label_name中名为column_name的属性。

class graphscope.framework.context.Context(context_node, key, result_schema)[源代码]

持有一个应用查询上下文的句柄。

评估应用后,上下文(顶点数据、部分结果等)会被保留,并可通过句柄引用。

class graphscope.framework.context.DynamicVertexDataContext(context_node, key)[源代码]

用于复杂结果存储的顶点数据上下文。 一个顶点有一个单一的值作为结果。

class graphscope.framework.context.ResultDAGNode(dag_node, op)[源代码]

一个类,表示DAG中的一个结果节点。

在GraphScope中,结果节点始终是DAG中的一个叶子节点。