带map redu的算法图

2024-06-25 23:40:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望实现一个算法从一个图,为每个用户返回一个用户的列表,他是与他有联系的度X

图形由一个文件表示,该文件包含每一行连接的用户对(连接在2个方向上)。在

例如:

davidbowie  omid
davidbowie  kim
kim torsten
torsten omid
brendan torsten
ziggy   davidbowie
mick    ziggy

对于1度,必须有以下输出:

^{pr2}$

每一行都包含一个用户和与之连接的用户列表。在

要使用python运行MapReduce函数,只需将mapper和reducer分别写入以下文件:

cat data.csv |  python mapper.py | sort -k1,1 | python reducer.py

我是hadoop的新手,我的问题是mapper.py和{}应该写什么?在


Tags: 文件用户py算法图形列表方向mapper
1条回答
网友
1楼 · 发布于 2024-06-25 23:40:41

我不确定你是否会接受一个没有显式使用MapReduce的答案,但是我想我会提供这个,因为它可以识别二级关系,非常简单,并且可以扩展。在

假设您有一个Neo4j数据库正在运行,您可以创建图形:

graph of relationships

。。。通过运行以下代码:

from py2neo import Graph

people_pair_text = """\
davidbowie  omid
davidbowie  kim
kim torsten
torsten omid
brendan torsten
ziggy   davidbowie
mick    ziggy"""

people = set(people_pair_text.split())

graph = Graph()

for person in people:
    query = """CREATE (n:Person {{ name : '{0}'}})""".format(person)
    graph.cypher.execute(query)

for pair in people_pair_text.split("\n"):
    person_a, person_b = pair.split()
    query = """
    MATCH (a:Person),(b:Person)
    WHERE a.name = '{0}' AND b.name = '{1}'
    CREATE (a)-[:KNOWS]->(b)
    CREATE (b)-[:KNOWS]->(a)
    """.format(person_a, person_b)
    graph.cypher.execute(query)

然后,要获得给定用户的二级连接(例如“omid”),可以运行如下cypher查询:

^{pr2}$

查询返回:

+            -+
| some_connection         |
+            -+
| Node[1]{name:"brendan"} |
| Node[4]{name:"kim"}     |
| Node[2]{name:"ziggy"}   |
+            -+

Cypher查询中的*2表示离开的关系数(即“hops”),因此如果您想返回更远的连接,可以更改此值。在

相关问题 更多 >