Общий подход к функциональному анализу наборов данных состоит в том, чтобы разделить набор данных каким-либо разумным образом, для документа вы можете разделить его на разделы в зависимости от размера. т.е. четыре потока означает, что документ разделен на четыре части.
Затем поток или процесс выполняет свой алгоритм для каждого раздела набора данных и генерирует выходные данные. Все выходные данные собираются вместе, а затем объединяются. Например, для подсчета слов набор подсчетов слов сортируется по слову, а затем каждый список просматривается с использованием поиска тех же слов. Если это слово встречается более чем в одном списке, подсчеты суммируются. В итоге выводится новый список с суммами всех слов.
Этот подход обычно называют картой / сокращением. Шаг преобразования документа в количество слов - это «карта», а объединение результатов - «сокращение».
В дополнение к преимуществу устранения накладных расходов для предотвращения конфликтов данных функциональный подход позволяет компилятору оптимизироваться для более быстрого подхода. Не все языки и компиляторы делают это, но поскольку компилятор знает, что его переменные не будут изменены внешним агентом, он может применять преобразования к коду для повышения его производительности.
Кроме того, функциональное программирование позволяет таким системам, как Spark, динамически создавать потоки, поскольку границы изменений четко определены. Вот почему вы можете написать одну цепочку функций в Spark, а затем просто использовать серверы, не меняя код. Чистые функциональные языки могут делать это в общем случае, делая каждое приложение по сути многопоточным.
Одна из причин, по которой функциональное программирование так популярно, - это возможность прозрачной и безопасной многопроцессорной обработки.
person
Grant BlahaErath
schedule
27.06.2018