2016-12-07 83 views
0

我有Spark應用程序,它將數據插入到妖精的巨人中。但它會插入具有相同名稱的重複頂點。測試條件'如果不是結果':'不匹配,並且我在同一個會話中。如何防止泰坦產生具有相同屬性的重複記錄?

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

我不知道這將如何與Goblin一起工作,但如果你想讓泰坦防止基於頂點屬性的重複,你可以使用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

謝謝!我還有一個問題。如果我想要標籤唯一的名稱,如何實現? – softwarevamp

+0

如果你問如何確保標籤是獨一無二的,那麼Titan無法幫助你。標籤並不意味着是唯一的。 Checkout [this](http://stackoverflow.com/a/36295205/1457059)回答更多信息。 –

+0

我希望每個標籤的名稱都是唯一的。 – softwarevamp