Я пытаюсь лучше понять программирование больших данных, но почти ничего не знаю о python. Поэтому я использую парадигму mapreduce и практически в python я обрабатываю некоторые текстовые файлы, хранящиеся в каком-то каталоге, скажем, mydir
, так что мой источник данных:
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
— это идентификатор файла, а v
— содержимое последнего файла. (В конце я хочу получить количество вхождений каждого слова, сгруппированного по автору)
Теперь проблема в том, что когда я запускаю алгоритм, я получаю результат пустого массива. Правилен ли мой синтаксис Python?