MapReduce – Python (Parte 1)

Hoje irei falar de um tópico com o qual estou tendo o meu primeiro contato através do curso de Data Science – que está sendo oferecido no Coursera – e dar alguns exemplos utilizando Python.

O MapReduce é um paradigma que nos permite trabalhar com uma enorme massa de dados utilizando um algoritmo paralelizado e distribuído. Como o próprio nome já nos deixa claro, é necessário explicitarmos 2 etapas distintas desse processamento, o Map e o Reduce.

Os mais familiarizados com Python, já conhecem 2 funções built-in (Python 2) que podem nos ajudar a entender melhor esse paradigma:

Map

Aplica uma função a cada elemento de um objeto iterável (Ex: lista, dicionário, etc), retornando uma lista de resultados.

Max() para cada lista dentro de uma lista de listas:

lista = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
lista2 = map(max, lista)
print lista2

Retorna:

[3, 6, 9]
Reduce

Aplica uma função a todos os elementos de um objeto iterável (Ex: lista, dicionário, etc), retornando um único valor.

import operator #Função de soma
lista = [1, 2, 3]
soma = reduce(operator.add, lista)
print soma

Retorna:

6

O funcionamento dessas funções (separadamente) já nos dá base para entender como o paradigma MapReduce é implementado. O fluxograma abaixa mostra as etapas de um processo MapReduce:

MapReduce

Para cada “registro”, aplicamos a função definida na etapa Map – isso nos permite paralelizar e distribuir o processo. Na etapa seguinte, os resultados da etapa Map são agrupados e ordenados. Por fim, aplicamos a função definida na etapa Reduce para cada grupo resultante da etapa anterior.

Em linhas gerais, o objetivo é dividir o problema em problemas menores, que podem ser executados independentemente. E com um alto volume de dados, o overhead gerado pelo paradigma torna-se inexpressivo.

Mas como são definidos os agrupamentos após a etapa de Map? Como isso se aplicaria a um problema real?

No próximo post entraremos em maiores detalhes. =)

MapReduce – Python (Parte 2)

Anúncios

Tags:, ,

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: