我試圖理解更好的大數據編程,但我幾乎對python一無所知。所以我用的MapReduce模式,實際上在python我把目錄中存儲一些文本文件說mydir
,使我的數據源是:mapreduce簡單功能 - 使用python
global_file = glob.glob("mydir/*")
def file_contents(file_name):
f = open(file_name)
try:
return f.read()
finally:
f.close()
datasource = dict((file_name, file_contents(file_name)) for file_name in global_file)
然後我的MapReduce功能
#each line in each text file is structured as follow : paper-id:::author1::author2::…. ::authorN:::title
def mapfn(k, v):
for w in v.splitlines():
separator = w.split('\:\:|\:\:\:')
for x in separator[1:len(separator)-1]:
for y in separator[-1].split():
yield x + y, 1
起初, k
和v
將代表一個關鍵值對,其中k
是該文件的ID並且v
是後者文件的內容。 (最後我想獲得按作者分組的每個詞的出現次數)
現在問題是,當我運行算法時,我得到一個空白數組結果。我的python語法是否正確?
您的語法只要你沒有SyntaxError就是「正確的」。你的命名可能會更好,你的正則表達式不能像你期望的那樣工作,但這是另一點。我強烈懷疑你的問題是從相對路徑填充你的數據源。只需打印出您的「global_file」變量以查明您是否有任何東西。 – 2013-04-22 12:08:38
@brunodesthuilliers我更新了我的帖子。我仍然有一個空數組結果。當我打印出「數據源」時,我會得到正確的內容。請注意,爲了不使用「re」庫,我更改了mapfn函數。你有什麼主意嗎 ? – Newben 2013-04-22 12:48:31