[英]Python Spark implementing map-reduce algorithm to create (column, value) tuples
[英]Algorithm graph with map reduce
我正在尋找一種從圖形中實現算法的方法,該圖形可為每個用戶返回與其度數為X的用戶列表。
該圖由一個文件表示,該文件包含在已連接用戶對的每一行中(連接在2方向上)。
例如 :
davidbowie omid
davidbowie kim
kim torsten
torsten omid
brendan torsten
ziggy davidbowie
mick ziggy
對於1度,這里必須具有以下輸出:
torsten brendan kim omid
brendan torsten
ziggy davidbowie mick
mick ziggy
kim davidbowie torsten
omid davidbowie torsten
davidbowie kim omid ziggy
每行包含一個用戶和與他連接1度的用戶列表。
要使用python運行MapReduce函數,只需在以下步驟將mapper和reducer寫入單獨的文件中:
cat data.csv | python mapper.py | sort -k1,1 | python reducer.py
我是hadoop的新手,我的問題是應該在mapper.py
和reducer.py
寫什么?
我不確定您是否會接受未明確使用MapReduce的答案,但我想提供此答案,因為它確實可以識別二級關系,而且非常簡單並且可以擴展。
假設您正在運行Neo4j數據庫,則可以創建圖:
...通過運行以下代碼:
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'),可以運行如下密碼查詢:
MATCH (omid:Person {name:"omid"})-[:KNOWS*2]-some_connection
WHERE some_connection <> omid
RETURN DISTINCT some_connection
查詢返回:
+-------------------------+
| some_connection |
+-------------------------+
| Node[1]{name:"brendan"} |
| Node[4]{name:"kim"} |
| Node[2]{name:"ziggy"} |
+-------------------------+
Cypher查詢中的*2
表示離開的關系數(即“跳數”),因此如果您想返回更遠的連接,則可以更改此關系數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.