2016-12-07 5 views
0

私はゴブリンでタイタンにデータを挿入するスパークアプリを持っています。同じ名前の重複した頂点を挿入します。テスト条件は '結果ではない場合:'と一致せず、私は同じセッションに参加しています。titanが同じプロパティを持つ重複レコードを生成しないようにするにはどうすればいいですか?

def savePartition(p): 
    print ('savePartition', p) 
    from goblin import element, properties 

    class Brand(element.Vertex): 
     name = properties.Property(properties.String) 

    import asyncio 

    loop = asyncio.get_event_loop() 

    from goblin.app import Goblin 
    app = loop.run_until_complete(Goblin.open(loop)) 
    app.register(Brand) 

    async def go(app): 
     session = await app.session() 

     for i in p: 
      if i['brand']: 
       traversal = session.traversal(Brand) 
       result = await traversal.has(Brand.name, i['brand']).oneOrNone() 

       if not result: # TODO: Remove Duplicates 
        print(i) 
        brand = Brand() 
        brand.name = i['brand'] 
        session.add(brand) 
        session.flush() 

     await app.close() 

    loop.run_until_complete(go(app)) 

rdd = rdd.foreachPartition(savePartition) 

どのように修正するのですか?どうもありがとう。

答えて

1

これはゴブリンとはどのように機能するのか分かりませんが、Titanには重複を防ぐためにTitan composite indicesを使用し、それらを一意にする必要があります。たとえば、次の操作を行うことができます:

mgmt = graph.openManagement() 
name = mgmt.makePropertyKey('name').dataType(String.class).make() 
mgmt.buildIndex('byNameUnique', Vertex.class).addKey(name).unique().buildCompositeIndex() 
mgmt.commit() 

上記の頂点にnameプロパティは一意でなければならないことを指定します。

+0

ありがとうございます!私は1つの質問がある。ラベルで一意の名前が必要な場合は、それをどのように達成するのですか? – softwarevamp

+0

ラベルがユニークであるようにする方法を尋ねるなら、タイタンはあなたを助けません。ラベルはユニークであることを意味するものではありません。チェックアウト[this](http://stackoverflow.com/a/36295205/1457059)詳細については、 –

+0

名前をラベルごとに一意にしたい。 – softwarevamp

関連する問題