Você está na página 1de 14

Map Reduce 3

caro Oliveira de Oliveira


icarofua@gmail.com

Python Help
http://pythonprogramminglanguage.com/
Tipos bsicos:
-

Tupla: (1,2,3,4)
Lista: [1,2,3,4]
String: teste ou Hello World
HashMap ou Dicionrio: {maria:2000, joao: 2000}

Pydoop
Pydoop uma interface Python para Hadoop que lhe permite escrever
aplicativos MapReduce em Python puro. Pydoop oferece vrios recursos que
normalmente no so encontrados em outras bibliotecas Python para
Hadoop:

uma rica API HDFS;


uma API MapReduce que permite escrever puros recorde Python leitores
/ escritores, partitioners e combinadores;
transparente Avro (de) serializao;

Sobre a biblioteca Pydoop


http://publications.crs4.it/pubdocs/2012/Pir12/presentation.pdf
https://crs4.github.io/pydoop/tutorial/index.html

WordCount Pydoop
Assumindo que no parametro text do mapper ser informado cada linha
do arquivo.
def mapper(_, text, writer):
for word in text.split():
writer.emit(word, 1)
def reducer(word, icounts, writer):
writer.emit(word, sum(map(int,icounts)))

WordCount com Combiner no Pydoop


Assumindo que no parametro text do mapper ser informado cada linha
do arquivo.
def mapper(_, text, writer):
for word in text.split():
writer.emit(word, 1)
def reducer(word, icounts, writer):
writer.emit(word, sum(map(int,icounts)))
def combiner(word, icounts, writer):
writer.count('combiner calls', 1)
reducer(word, icounts, writer)

Mximo de um estoque
Assumindo que no parametro text do mapper ser informado cada linha
do arquivo.
def mapper(_, text, writer):
columns = text.split("\t")
writer.emit(columns[0], columns[1])
def reducer(key,values,writer):
writer.emit(key, max(map(int,values)))

Mnimo de um estoque
Assumindo que no parametro text do mapper ser informado cada linha
do arquivo.
def mapper(_, text, writer):
columns = text.split("\t")
writer.emit(columns[0], columns[1])
def reducer(key,values,writer):
writer.emit(key, min(map(int,values)))

Total de um estoque
Assumindo que no parametro text do mapper ser informado cada linha
do arquivo.
def mapper(_, text, writer):
columns = text.split("\t")
writer.emit(columns[0], columns[1])
def reducer(key,values,writer):
writer.emit(key, sum(map(int,values)))

Total, mnimo e mximo do volume de um estoque


Assumindo que no parametro text do mapper ser informado cada linha
do arquivo.
def mapper(_, text, writer):
columns = text.split("\t")
writer.emit(columns[0], columns[1])
def reducer(key,values,writer):
data = map(int, values)
volmin = min(data)
volmax = max(data)
volsum = sum(data)
record = str(volsum) + "\t" + str(volmin) + "\t" + str(volmax)
writer.emit(key, record)

Total, mnimo e mximo do volume de um estoque com aprovado e


reprovado
Assumindo que no parametro text do mapper ser informado cada linha
do arquivo.
def mapper(_, text, writer):
columns = text.split("\t")
if columns[2] == "Yes":
writer.emit(columns[0], columns[1])
def reducer(key,values,writer):
data = map(int, values)
volmin = min(data)
volmax = max(data)
volsum = sum(data)
record = str(volsum) + "\t" + str(volmin) + "\t" + str(volmax)
writer.emit(key, record)

Total, mnimo e mximo do volume de um estoque com duas chaves


Assumindo que no parametro text do mapper ser informado cada linha
do arquivo.
def mapper(_, text, writer):
columns = text.split("\t")
writer.emit((columns[0], columns[1]), columns[2])
def reducer(key,values,writer):
data = map(int, values)
volmin = min(data)
volmax = max(data)
volsum = sum(data)
record = str(volsum) + "\t" + str(volmin) + "\t" + str(volmax)
writer.emit(key, record)

Total, mnimo e mximo do volume de um estoque com duas chaves e filtro


por situao
Assumindo que no parametro text do mapper ser informado cada linha
do arquivo.
def mapper(_, text, writer):
columns = text.split("\t")
if columns[3] == "Yes":
writer.emit((columns[0], columns[1]), columns[2])
def reducer(key,values,writer):
data = map(int, values)
volmin = min(data)
volmax = max(data)
volsum = sum(data)
record = str(volsum) + "\t" + str(volmin) + "\t" + str(volmax)
writer.emit(key, record)

Exerccio

Contabilizar o total, mximo e mnimo dos dados de um dos link abaixos


utilizando 3 dados diferentes para agrupamento:

http://content.udacity-data.com/courses/ud617/purchases.txt.gz

http://content.udacity-data.com/courses/ud617/access_log.gz
https://raw.githubusercontent.com/tocology/hadoop_python/master/data/customer-orders.csv

http://archive.ics.uci.edu/ml/datasets/Restaurant+%26+consumer+data

Você também pode gostar