【问题标题】:JanusGraph .graphml file schema issue while creating in Cassandra在 Cassandra 中创建时 JanusGraph .graphml 文件架构问题
【发布时间】:2019-09-11 02:14:15
【问题描述】:

我正在尝试从 .graphml 文件创建架构并使用 Cassandra 作为后端存储。尝试将数据加载到为附加的 .graphml 文件创建的架构中时,我遇到了以下问题。架构定义如下。

    private static void setAirRouteSchema(JanusGraphManagement mgmt, JanusGraph graph) throws IOException {

//        System.out.println("Inside setAirRouteSchema  "+mgmt);
        // Define edge labels and usage
        mgmt = graph.openManagement();
        mgmt.makeEdgeLabel("Frederick Douglass Boulevard").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("West Street").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("North Moore Street").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("Nagle Avenue").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("Broadway").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("Rivington Street").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("West 144th Street").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("[u'River Terrace', u'Vesey Place']").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("Avenue C").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("Division Street").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("Eldridge Street").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("East 79th Street").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("Madison Avenue").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("East 27th Street").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("Hester Street").multiplicity(MULTI).make();
        mgmt.makeEdgeLabel("East 81st Street").multiplicity(MULTI).make();
        mgmt.commit();

// Define vertex labels
        mgmt = graph.openManagement();
        mgmt.makeVertexLabel("traffic_signals").make();
        mgmt.commit();

// Define vertex property keys
        mgmt = graph.openManagement();
        mgmt.makePropertyKey("ref").dataType(String.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("highway").dataType(String.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("osmid").dataType(String.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("x").dataType(String.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("y").dataType(String.class).cardinality(Cardinality.SINGLE).make();
        mgmt.commit();

// Define edge property keys
        mgmt = graph.openManagement();
        mgmt.makePropertyKey("service").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("access").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("width").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("tunnel").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("bridge").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
//        mgmt.makePropertyKey("ref").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("geometry").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("maxspeed").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("lanes").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
//        mgmt.makePropertyKey("key").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("oneway").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
//        mgmt.makePropertyKey("highway").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
//        mgmt.makePropertyKey("osmid").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("length").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.makePropertyKey("name").dataType(Integer.class).cardinality(Cardinality.SINGLE).make();
        mgmt.commit();

}

GraphMl file loaded from here : https://www.kaggle.com/crailtap/street-network-of-new-york-in-graphml

Error :

Exception in thread "main" java.lang.IllegalArgumentException: Name cannot be in protected namespace: edge
    at org.janusgraph.graphdb.types.system.SystemTypeManager.throwIfSystemName(SystemTypeManager.java:72)
    at org.janusgraph.graphdb.types.StandardRelationTypeMaker.name(StandardRelationTypeMaker.java:181)
    at org.janusgraph.graphdb.types.StandardRelationTypeMaker.<init>(StandardRelationTypeMaker.java:53)

Also Schema is being created but data is not getting entered. Printing the schema created:

------------------------------------------------------------------------------------------------
Vertex Label Name              | Partitioned | Static                                             |
---------------------------------------------------------------------------------------------------
traffic_signals                | false       | false                                              |
---------------------------------------------------------------------------------------------------
Edge Label Name                | Directed    | Unidirected | Multiplicity                         |
---------------------------------------------------------------------------------------------------
East 81st Street               | true        | false       | MULTI                                |
Frederick Douglass Boulevard   | true        | false       | MULTI                                |
West Street                    | true        | false       | MULTI                                |
North Moore Street             | true        | false       | MULTI                                |
Nagle Avenue                   | true        | false       | MULTI                                |
Broadway                       | true        | false       | MULTI                                |
Rivington Street               | true        | false       | MULTI                                |
West 144th Street              | true        | false       | MULTI                                |
[u'River Terrace', u'Vesey Place'] | true        | false       | MULTI                                |
Avenue C                       | true        | false       | MULTI                                |
Division Street                | true        | false       | MULTI                                |
Eldridge Street                | true        | false       | MULTI                                |
East 79th Street               | true        | false       | MULTI                                |
Madison Avenue                 | true        | false       | MULTI                                |
East 27th Street               | true        | false       | MULTI                                |
Hester Street                  | true        | false       | MULTI                                |
---------------------------------------------------------------------------------------------------
Property Key Name              | Cardinality | Data Type                                          |
---------------------------------------------------------------------------------------------------
ref                            | SINGLE      | class java.lang.String                             |
highway                        | SINGLE      | class java.lang.String                             |
osmid                          | SINGLE      | class java.lang.String                             |
x                              | SINGLE      | class java.lang.String                             |
y                              | SINGLE      | class java.lang.String                             |
service                        | SINGLE      | class java.lang.Integer                            |
access                         | SINGLE      | class java.lang.Integer                            |
width                          | SINGLE      | class java.lang.Integer                            |
tunnel                         | SINGLE      | class java.lang.Integer                            |
bridge                         | SINGLE      | class java.lang.Integer                            |
geometry                       | SINGLE      | class java.lang.Integer                            |
maxspeed                       | SINGLE      | class java.lang.Integer                            |
lanes                          | SINGLE      | class java.lang.Integer                            |
oneway                         | SINGLE      | class java.lang.Integer                            |
length                         | SINGLE      | class java.lang.Integer                            |
name                           | SINGLE      | class java.lang.Integer                            |
---------------------------------------------------------------------------------------------------
Vertex Index Name              | Type        | Unique    | Backing        | Key:           Status |
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
Edge Index (VCI) Name          | Type        | Unique    | Backing        | Key:           Status |
----------------------------------

----------------------------------------------- ------------------

关系索引 |类型 |方向 |排序键 |订购 |状态 |

【问题讨论】:

  • 我不清楚您何时收到此错误。它是在模式创建还是在加载graphml期间?如果它在加载过程中发生,那么您用来加载它的代码是什么 - Gremlin 中的标准 io() 函数?
  • 架构创建很好。错误是在从 graphml 加载数据时。要加载的代码包括以下步骤: 1. JanusGraph graph = JanusGraphFactory.open("src/main/resources/janusgraph-cassandra.properties"); 2. JanusGraphManagement mgmt = graph.openManagement(); 3. setAirRouteData(graph);
  • setAirRouteData(graph) implementation as--> private static void setAirRouteData(JanusGraph graph) throws IOException { graph.io(graphml()).readGraph("/src/main/java/../ ../../0184096_York.graphml");图.tx().commit(); }

标签: cassandra gremlin janusgraph


【解决方案1】:

我不确定这是否是问题所在,但 GraphML 不包括 TinkerPop GraphMLReader 预期的边缘和顶点标签(即分别为 labelElabelV)。您可以调整您的数据或配置GraphMLReader 以使用您通过GraphMLReader.Builder.edgeLabelKey()vertexLabelKey() 指定的数据中的属性键。您可以在javadoc 中查看这些配置和其他配置。

我认为你想做这样的事情:

GraphMLReader reader = GraphMLReader.build().edgeLabelKey(<whatever your label field is>).create();
InputStream input = FileInputStream(<path to graphml file>);
reader.readGraph(input, graph);

请注意,如果您使用的是较新版本的 TinkerPop,您可以将 Gremlin 用于:

GraphMLReader reader = GraphMLReader.build().edgeLabelKey(<whatever your label field is>).create();
g.io(<path to graphml file>).
    with(IO.reader, reader).
    read().iterate()

【讨论】:

  • 谢谢。之后,我做了:```GraphMLReader reader = GraphMLReader.build().edgeLabelKey("labelE").vertexLabelKey("labelV").create(); InputStream input = new FileInputStream("src/main/java/com/../../Manhattan.graphml"); reader.readGraph(输入,图);图.tx().commit(); ``` 不过还是给Exception in thread "main" java.lang.IllegalArgumentException: Name cannot be in protected namespace: edge
  • "edge" 是 JanusGraph 中的保留字(与其他一些一样 - 完整列表为:"key"、"vertex"、"edge"、"element"、"property"、"label" ) 如果您尝试使用其中任何一个,您会收到该错误,但我看不出您在哪里执行此操作。也许您应该在本地检查您的代码以验证“边缘”没有被以某种方式使用? github.com/JanusGraph/janusgraph/blob/…
猜你喜欢
  • 2019-02-11
  • 2016-12-07
  • 2017-11-16
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多