Existe um algoritmo para estimar o Pi com números radômicos. Implemente-o sobre o Spark.
Descrição do algoritmo: http://www.eveandersson.com/pi/monte-carlo-circle
Implementação EM PYTHON (não sobre o SPARK): http://www.stealthcopter.com/blog/2009/09/python-calculating-pi-using-random-numbers/
O númer de pontos deve ser 100000 (cem mill) vezes o número mínimo de partições padrão do seu SparkContext (sc.defaultMinPartitions). Esses pontos devem ser selecionados aleatóriamente na etapa de map (ver observações).
Observações: use as funções map (para mapear as ocorrêncas em 0 ou 1, significando 1 quando o ponto aleatório cair dentro do círculo e 0 quando o contrário) e reduce (para sumar as ocorrências).
In [4]:
from math import sqrt
from random import *
In [5]:
def area(x,y):return 1 if sqrt(x*x+y*y)<=1 else 0
def mapf(z):
x= random()
y=random()
return area(x, y)
In [6]:
n = sc.defaultMinPartitions * 100000
data = sc.parallelize(range(1, n))
r = data.map(mapf)
In [7]:
soma = r.reduce(lambda a, b: a+b)
print(soma)
print(r.count())
In [8]:
soma = int(soma)
In [9]:
pi = 4*(soma/(r.count()))
print(pi)
In [10]:
def isPrime(number):
for i in range(1,number):
if((i != 1) and (i != number)):
if ((number % i) == 0):
return False
print(number)
return True
In [11]:
data = sc.parallelize(range(1, 1000000))
r = data.filter(isPrime)
print(r.take(100))
In [12]:
file = sc.textFile('municipios_do_Brasil.csv')
In [13]:
file_mapping = file.map(lambda line: line.split(',')).map(lambda word: (word[0], word[1]))
In [14]:
#Contando o numero de municipios por Estado
count_cities = file_mapping.map(lambda word: (word[0], 1)).reduceByKey(lambda x, y: x + y)
print(count_cities.collect())
In [15]:
#Listando os municipios por Estado
list_cities = file_mapping.groupByKey().map(lambda x : (x[0], list(x[1])))
print(list_cities.take(1))
Memórias Póstumas de Brás Cubas é um romance escrito por Machado de Assis, desenvolvido em princípio como folhetim, de março a dezembro de 1880, na Revista Brasileira, para, no ano seguinte, ser publicado como livro, pela então Tipografia Nacional.
A obra retrata a escravidão, as classes sociais, o cientificismo e o positivismo da época. Dada essas informações, será que conseguimos idenficar essas características pelas palavras mais utilizadas em sua obra?
Utilizando o dataset Machado-de-Assis-Memorias-Postumas.txt, faça um word count e encontre as palavras mais utilizadas por Machado de Assis em sua obra. Não esqueça de utilizar stopwords.pt para remover as stop words!
In [16]:
file2 = sc.textFile('Machado-de-Assis-Memorias-Postumas.txt')
In [41]:
stopwords = sc.textFile('stopwords.pt')
stopwords = stopwords.flatMap(lambda word: word.split())
stopwords = stopwords.collect()
In [42]:
stopwords
Out[42]:
In [54]:
def filter_words(word):
print(word[0])
if word[0] in stopwords:
return False
return True
In [59]:
counts = file2.flatMap(lambda line: line.split(" ")).map(lambda word: word.lower()).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
counts = counts.filter(filter_words)
counts = counts.takeOrdered(100, key = lambda x: -x[1])
In [60]:
print(counts)
In [ ]: