Несколько картографов записывают вывод в один файл

Вот лучший алгоритм, чем другие люди предложили:

#include <algorithm>
#include <vector>

template<class It> It unique2(It const begin, It const end)
{
    It i = begin;
    if (i != end)
    {
        It j = i;
        for (++j; j != end; ++j)
        {
            if (*i != *j)
            { using std::swap; swap(*++i, *j); }
        }
        ++i;
    }
    return i;
}
int main()
{
    std::vector<std::string> v;
    v.push_back("words");
    v.push_back("words");
    v.push_back("are");
    v.push_back("fun");
    v.push_back("words");
    v.push_back("fun");
    v.push_back("fun");
    std::sort(v.begin(), v.end());
    v.erase(v.begin(), unique2(v.begin(), v.end()));
    std::sort(v.begin(), v.end());
    v.erase(unique2(v.begin(), v.end()), v.end());
}

Это лучше, потому что для хранения требуется только swap без вспомогательного vector, что означает, что он будет вести себя оптимально для более ранних версиях C ++ и не требует, чтобы элементы были скопированы.

Если вы более умны, я думаю, вы также можете избежать сортировки вектора дважды.

0
задан vamsi 17 January 2019 в 04:18
поделиться

1 ответ

Обычно в задании MapReduce картографы не записывают ни в один файл HDFS . Вместо этого они передают свои данные в IdentityReducer, который затем записывает вывод в файл (или несколько файлов в случае нескольких редукторов).

Попробуйте установить в своем коде клиента:

  //...
  conf.setReducerClass(IdentityReducer.class);
  conf.setNumReduceTasks(1);
0
ответ дан Vicente Adolfo Bolea Sánchez 17 January 2019 в 04:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: