15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

super().__init__()

self.path = path

def read(self):

return open(self.path).read()

Podemos ter qualquer quantidade de subclasses InputData como a PathInputData

mostrada, e cada uma pode implementar a interface-padrão para o método read

que retorne os dados em bytes que devam ser processados. Outras subclasses de

InputData podem ler da rede, descomprimir dados de forma transparente etc.

O trecho a seguir é uma interface abstrata similar para o MapReduce chamada

Worker que consume os dados de entrada de forma padrão.

class Worker(object):

def __init__(self, input_data):

self.input_data = input_data

self.result = None

def map(self):

raise NotImplementedError

def reduce(self, other):

raise NotImplementedError

No exemplo a seguir, definimos uma subclasse concreta de Worker para

implementar uma função específica de MapReduce que queremos aplicar: um

simples contador de quebras de linha.

class LineCountWorker(Worker):

def map(self):

data = self.input_data.read()

self.result = data.count('\n')

def reduce(self, other):

self.result += other.result

Pode parecer que essa implementação está indo às mil maravilhas, mas

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!