如何防止 titan 生成具有相同 属性 的重复记录?
How to prevent titan generate duplicate records with same property?
我有 spark 应用程序,它可以使用 goblin 将数据插入 titan。但它会插入具有相同名称的重复顶点。测试条件'if not result:'不匹配,我在同一个会话
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)
如何解决?非常感谢。
我不确定这如何与 Goblin 一起使用,但如果您希望 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
属性必须是唯一的。
我有 spark 应用程序,它可以使用 goblin 将数据插入 titan。但它会插入具有相同名称的重复顶点。测试条件'if not result:'不匹配,我在同一个会话
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)
如何解决?非常感谢。
我不确定这如何与 Goblin 一起使用,但如果您希望 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
属性必须是唯一的。