Я начинаю использовать mrjob Python для преобразования некоторых из моих давно работающих программ Python в задания MapReduce Hadoop. . У меня есть простые примеры подсчета слов, и я концептуально понимаю пример «текстовой классификации».
Тем не менее, у меня возникли небольшие проблемы с определением шагов, которые мне нужно сделать, чтобы моя проблема заработала.
У меня есть несколько файлов (около 6000), каждый из которых содержит от 2 до 800 строк. В этом случае каждая строка представляет собой простой «сигнал», разделенный пробелами. Мне нужно сравнить корреляцию между каждой строкой в каждом файле и КАЖДОЙ другой строкой во ВСЕХ файлах (включая себя). Затем на основе коэффициента корреляции я выведу результаты.
Пример одного файла:
1 2 3 4 2 3 1 2 3 4 1 2
2 2 3 1 3 3 1 2 3 1 4 1
2 3 4 5 3 2 1 3 4 5 2 1
...
Мне нужно вывести каждую СТРОКУ этого файла в паре с КАЖДОЙ ДРУГОЙ СТРОКОЙ из любого другого файла... или я мог бы объединить все файлы в один файл, если это упростит задачу, но мне все равно понадобится попарная итерация.
Я понимаю, как выполнять вычисления и как использовать последний шаг сокращения для агрегирования и фильтрации результатов. Трудность, с которой я столкнулся, заключается в том, как yield
все попарные элементы выполнить последовательные шаги, не читая все файлы в одном наборе? Думаю, я мог бы заранее подготовить входной файл, в котором используется itertools.product
, но этот файл был бы чрезмерно большим.
reduce
и дать всем строкам один и тот же ключ, чтобы функция получила все строки ... затем использовать все пары отitertools.product
доyield
с соответствующими ключами. Однако не уверен, что это правильный способ сделать что-то. - person JudoWill   schedule 11.07.2011