Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Inserir Título Aqui 
Inserir Título Aqui
Tecnologias de BI 
e Big Data
Projetos Mahout e Spark 
Responsável pelo Conteúdo:
Prof. Dr. Alberto Messias
Revisão Textual:
Profa. Ms. Natalia Conti
Nesta unidade, trabalharemos os seguintes tópicos:
• Projeto Mahout
• Execução de algoritmo Kmeans no Hadoop
• Projeto Spark
• Orientações para Leitura Obrigatória
• Material Complementar
Fonte: iStock/Getty Im
ages
Objetivos
• Permitir ao estudante compreender as definições iniciais sobre o projeto Mahout, sua 
instalação e a execução do algoritmo Kmeans com o Mahout, introdução ao projeto 
Apache Spark, bem como seu processo de instalação e um caso prático de execução.
Caro Aluno(a)!
Olá, nesta unidade abordaremos as definições iniciais sobre o projeto Mahout, sua 
instalação e a execução do algoritmo Kmeans com o Mahout, introdução ao projeto 
Apache Spark, bem como seu processo de instalação e um caso prático de execução 
como contagem de palavras e o algoritmo Kmeans.
É importante que você leia atentamente as propostas elencadas no conteúdo, que assista 
às videoaulas, que interaja com seu tutor e outros alunos em nossa disciplina e que 
explore todo o potencial de nosso ambiente virtual de aprendizagem e dos conteúdos à 
sua disposição.
Bons estudos!
Projetos Mahout e Spark 
UNIDADE 
Projetos Mahout e Spark 
Projeto Mahout
O projeto Mahout é um projeto de código livre da fundação Apache que possui uma 
biblioteca de implementação de algoritmos para aprendizagem de máquina. De acordo 
com Giacomelli (2013), o objetivo do projeto Mahout é ser uma escolha de ferramenta 
para aprendizado por máquina para processamento de conjuntos de dados extremamen-
te grandes, tanto para execução em clusters de instâncias de Hadoop ou em uma única 
máquina. O Mahout é uma ferramenta desenvolvida em linguagem de programação 
Java dentro do projeto de computação distribuída Hadoop.
O projeto Mahout possui implementações de algoritmos de classificação e clustering, 
como o algoritmo K-means que possui grande relevância para o curso.
O projeto Mahout possui implementações de diversos algoritmos em sua execução 
direta no Hadoop com o Mapreduce, algoritmos em Spark, além de poder usar fra-
meworks H2O e Flink.
Usando o Mapreduce, há os seguintes algoritmos implementados:
Classificação:
 » Naive Bayes;
 » Hidden Markov Models;
 » Logistic Regression;
 » Random Forest;
Clustering:
 » k-Means;
 » Canopy;
 » Fuzzy k-Means;
 » Streaming KMeans;
 » Spectral Clustering;
Processamento pós-clustering:
 » Cluster Dumper tool;
 » Cluster visualisation;
Redução de dimensionalidade:
 » Singular value decomposition;
 » Algoritmo Lanczos;
 » Stochastic SVD;
 » PCA (via Stochastic SVD);
 » QR Decomposition;
6
7
Outras implementações de suporte:
 » RowSimilarityJob;
 » Collocations;
 » Sparse TF-IDF Vectors em Textos;
 » XML Parsing;
 » Email Archive Parsing;
 » Evolutionary Processes;
Instalação do Mahout
A instalação do framework Mahout parte do pressuposto de que a plataforma está 
instalada e em funcionamento adequado.
Após o download do pacote Mahout, deve-se descompactar e adicionar um link simbólico 
/usr/local com o nome mahout: wget https://goo.gl/d5ix2B
tar xzf apache-mahout-distribution-0.13.0.tar.gz
rm apache-mahout-distribution-0.13.0.tar.gz
mv apache-mahout-distribution-0.13.0 /usr/local
ln -sf /usr/local/apache-mahout-distribution-0.13.0/ /usr/local/mahout
Execução de Algoritmo Kmeans no Hadoop
Vamos utilizar a mesma base usada no exemplo de execução da contagem de palavras 
em Hadoop. Vamos iniciar pela cópia dos textos para o HDFS.
Segue o comando para a cópia dos arquivos com os textos:
hadoop fs -copyFromLocal C50 /
Segue a Figura que ilustra a correta cópia dos arquivos.
7
UNIDADE 
Projetos Mahout e Spark 
Figura 1 - Hadoop
Inicialmente devem-se criar arquivos de vetores sequenciais para o processamento 
dos textos; para isso, usa-se o comando “seqdirectory” presente no Mahout.
Segue o comando executado na base:
./mahout seqdirectory -i /C50/C50train -o /seqreuters -xm sequential
Nesse caso, são passados parâmetros de diretório ou arquivo de entrada, o diretório 
de saída do comando e o parâmetro que informa para se criar o vetor sequencial.
Saída do comando:
Figura 2
O próximo comando faz efetivamente a análise de textos a partir dos vetores criados, são 
criados então os vetores contendo o TF-IDF calculado para os termos e documentos existentes.
8
9
Segue o comando:
./mahout seq2sparse -i /seqreuters -o /train-sparse
Figura 3
O comando recebe como parâmetro o diretório sequencial de entrada, o diretório 
para saída e o parâmetro que informa a criação de vetores de análise de texto, por 
padrão usando o TF-IDF “seq2sparce”.
9
UNIDADE 
Projetos Mahout e Spark 
O próximo comando executa efetivamente o algoritmo kmeans:
./mahout kmeans -i /train-sparse/tfidf-vectors/ -c /kmeans-train-clusters -o /train-clusters-
-final -dm org.apache.mahout.common.distance.EuclideanDistanceMeasure -x 10 -k 10 -ow
Figura 4
O comando de execução do kmeas recebe os seguintes parâmetros:
 » i: passa os vetores e valores de TF-IDF para o algoritmo;
 » c: indica o diretório de clusters iniciais;
 » o: indica o diretório de execução do algoritmo e onde ficarão armazenados os 
clusters gerados;
 » dm: indica o tipo de métrica de distância a ser utilizada, nesse caso, utilizando a 
distância euclidiana;
 » x: indica o número máximo de iterações do algoritmo, nesse caso, o valor máximo 
de 10 iterações;
 » k: indica o número de clusters do modelo a ser gerado pelo algoritmo, nesse caso, 
10 clusters;
 » ow: indica que o algoritmo poderá sobrescrever os diretórios caso os indicados 
para a saída não estejam vazios;
10
11
Note que a saída do algoritmo será no formato de vetores; assim, como o formato de 
entrada, será necessário então converter os vetores de saída para texto plano. Para isso, 
o mahout disponibiliza a ferramenta “clusterdump”, que permite a criação de um arquivo 
de saída com texto plano e no diretório de trabalho fora do HDFS.
./mahout clusterdump -d /train-sparse/dictionary.file-0 -dt sequencefile -i /train-
clusters-final/clusters-10-final -n 10 -b 100 -o ~/saida_clusters.txt -p /train-clusters-
final/clustered-points
 
Seguem os parâmetros passados para o comando “clusterdump”:
 » d: indica o arquivo de dicionário, nesse caso, o dicionário inicialmente criado pelo 
comando de criação dos valores de TF-IDF;
 » dt: indica o tipo de dicionário que foi passado como parâmetro, nesse caso, o 
tipo era arquivos/vetores sequenciais;
 » i: indica o diretório de entrada para o comando, nesse caso, contendo os clusters 
criados pelo algoritmo kmeans;
 » n: indica o número de top termos existentes no cluster, nesse caso, o arquivo de 
saída conterá os 10 principais termos que caracterizam o cluster;
 » b: indica o texto que caracterizará o centroide, nesse caso, o parâmetro 100 
indica os 100 caracteres iniciais que caracterizam o centroide;
 » o: indica o arquivo de saída do comando, nesse caso, fora do HDFS;
 » p: indica os pontos que foram passados como parâmetro para a criação dos 
vetores e clusters;
O arquivo de saída possui as configurações dos clusters e seus principais termos; 
segue o conteúdo do arquivo:
1:{“r”:[{“0”:0.473},{“0.01”:0.269},{“0.02”:0.329},{“0.03”:0.348},
{“0.04”:0.209},{“0.05”:0.498},{“0.06”
Top Terms:
million => 2.01768555414109
percent => 1.9796222609914702
its => 1.9652491679558388
company => 1.7706142707622095
billion => 1.7352270411921071
year => 1.6528963794638385
from => 1.6224009523461589
which => 1.5927217226762038
market => 1.5844123679639655
would => 1.553171214777908
11
UNIDADE 
Projetos Mahout e Spark 
2:{“r”:[{“1”:1.072},{“1,000”:2.487},{“1,900”:3.372},{“107”:1.021}
,{“171”:1.986},{“20”:1.289},{“21”:1.9Top Terms:
kwik => 19.68147373199463
bowler => 14.924392700195312
stores => 11.923139572143555
save => 11.16239881515503
superstores => 10.116906881332397
107 => 10.109184741973877
save’s => 9.3254234790802
chilled => 7.99928092956543
graeme => 7.725433826446533
fabric => 7.725433826446533
3:{“r”:[{“0.01”:0.538},{“0.02”:0.538},{“0.03”:0.569},{“0.04”:0.591
},{“0.05”:0.499},{“0.06”:0.552},{“0.
Top Terms:
computer => 5.46894957037533
software => 5.239956008686739
microsoft => 4.4167699940064375
internet => 4.11774596045999
corp => 3.0309750865487493
computers => 2.993433007072
windows => 2.877699588326847
quarter => 2.790801902378307
apple => 2.7814465102027444
pc => 2.690458118214327
12
13
4:{“r”:[{“0.00”:2.471},{“0.01”:1.14},{“0.09”:1.17},{“0.10”:0.971},
{“0.16”:1.17},{“0.2”:1.115},{“0.20”:
Top Terms:
b => 6.5324959497194035
shenzhen => 6.3067194191185205
shanghai => 6.03469366640658
index => 5.877770565651558
markets => 5.281963432157362
points => 5.199001299368368
investors => 4.874857696327004
securities => 4.628458164833687
exchanges => 4.141134030110127
stock => 4.080203191654102
5:{“r”:[{“0”:3.092},{“1”:1.072},{“1.7”:2.649},{“10”:1.174},{“100,0
00”:2.24},{“13”:1.874},{“1995”:1.615
Top Terms:
norilsk => 23.49074363708496
norilsk’s => 15.450867652893066
nickel => 12.47007417678833
uneximbank => 10.925413131713867
platinum => 8.708802223205566
roubles => 8.3026442527771
moscow => 8.118297100067139
russian => 7.876293182373047
feldman => 7.725433826446533
interrosimpex => 7.725433826446533
13
UNIDADE 
Projetos Mahout e Spark 
6:{“r”:[{“0003”:2.214},{“1.43”:2.514},{“1.6”:3.233},{“1.621”:2.621
},{“1.73”:2.879},{“1.8”:2.199},{“1.9
Top Terms:
octavia => 14.064229170481363
skoda => 13.854314804077148
sedan => 8.558053016662598
octavias => 8.547192096710205
kalma => 7.802151203155518
vw => 7.316673119862874
model => 6.555060386657715
crowns => 6.507203102111816
skoda’s => 6.345716953277588
volkswagen => 6.334976593653361
7:{“r”:[{“1”:1.516},{“1.3”:2.456},{“1.8”:2.333},{“10”:1.174},{“102
”:3.17},{“118.75”:3.863},{“13”:1.874
Top Terms:
211 => 14.927149295806885
measure => 12.132993698120117
tech => 11.13357400894165
california => 10.693992614746094
proposition => 9.519742488861084
ballot => 9.508709192276001
lawsuits => 9.39264965057373
doerr => 8.708802223205566
proponents => 7.99928092956543
valley => 7.407749176025391
14
15
7:{“r”:[{“1”:1.516},{“1.3”:2.456},{“1.8”:2.333},{“10”:1.174},{“102
”:3.17},{“118.75”:3.863},{“13”:1.874
Top Terms:
211 => 14.927149295806885
measure => 12.132993698120117
tech => 11.13357400894165
california => 10.693992614746094
proposition => 9.519742488861084
ballot => 9.508709192276001
lawsuits => 9.39264965057373
doerr => 8.708802223205566
proponents => 7.99928092956543
valley => 7.407749176025391
8:{“r”:[{“0”:2.69},{“0.1”:1.202},{“0.7”:1.086},{“1”:0.957},{“1.2”:
2.101},{“1.75”:0.948},{“10”:1.5},{“1
Top Terms: 
cocoa => 12.384515571594239
exporters => 8.50833672114781
ivory => 8.21403864451817
tonnes => 6.71575323513576
crop => 6.522159004211426
abidjan => 6.3893278803144185
caistab => 5.51087145124163
coast => 5.5066701071602955
coast’s => 4.897656372615269
97 => 4.866566862378802
15
UNIDADE 
Projetos Mahout e Spark 
9:{“r”:[{“0”:0.624},{“0.01”:0.237},{“0.02”:0.237},{“0.1”:0.486},{“
0.10”:0.202},{“0.2”:0.328},{“0.3”:0.
Top Terms: 
china => 2.694108472310831
chinese => 2.158722143216715
hong => 2.1480606425991082
kong => 1.9270160045971756
he => 1.8345288953052552
beijing => 1.8224368677171905
his => 1.6468639969146102
has => 1.627261827174179
china’s => 1.6272221035669168
would => 1.5738226572219431
10:{“r”:[{“1,500”:2.89},{“2,800”:3.719},{“30,000”:2.844},{“743”:2.
518},{“about”:0.586},{“although”:1.45
Top Terms: 
hoffa => 26.19202709197998
ballots => 24.79529571533203
teamsters => 17.274595260620117
carey => 15.327719688415527
o’mara => 13.380844116210938
quindel => 13.380844116210938
carey’s => 12.153128623962402
election => 11.104988098144531
counted => 11.062716484069824
votes => 11.028792381286621
Ao analisar os clusters gerados, observa-se mais claramente nos clusters 3 e 9 que 
possuem um tema em comum, por exemplo, no cluster 3 os dez termos estão relacio-
nados à computação, enquanto que que no cluster 9, percebe-se claramente o assunto 
de China e cidades; certamente seria um agrupamento por assuntos nas postagens de 
blogs analisadas.
16
17
A saída do comando exibe o raio de atuação do centroide, com a variável específica 
e seu valor de raio associado. Para a ordenação dos termos exibida, a saída traz o valor 
de cada um destes para o cluster gerado.
Os diversos algoritmos implementados em Mahout poderão ser implantados em 
projetos reais e dependerão de integrações ou implementações específicas dado o 
modelo de negócio ou tecnologias utilizadas.
Projeto Spark
O projeto Spark foi desenvolvido inicialmente pelo AMPLab da Universidade de 
Berkeley, usando os mesmos conceitos do projeto Mesos, proposto pela mesma 
universidade. Como característica principal, o Spark otimiza os processos executados 
através do Hadoop MapReduce em memória, o que permite um desempenho em torno 
de 100 vezes mais rápido que o MapReduce com Hadoop tradicional.
Em geral, o Spark propõe uma plataforma de processamento ao tradicional oferecido 
pelo Hadoop, oferecendo ou possibilitando implementações em linguagens Scala, Java, 
R e Python, e ainda permitindo interface com as plataformas tradicionais Hadoop, como: 
HDFS, HBase, Cassandra, MapR-DB, MongoDB e Amazon’s S3.
Segue o diagrama Spark que ilustra graficamente sua estrutura com seus prin-
cipais componentes:
Figura 5
Fonte: Adaptado de Scott, 2015
17
UNIDADE 
Projetos Mahout e Spark 
Segue a descrição simples de cada um dos componentes principais:
Apache Spark Core
O Spark Core é a plataforma principal de execução que possibilita a base para todas as 
outras funcionalidades. Ela fornece a execução em memória e faz referência a conjuntos 
de dados em sistemas de armazenamento externos e distribuídos.
Spark SQL
O Spark SQL é um componente importante do Spark Core, que permite a abs-
tração de dados chamada SchemaRDD, que fornece suporte para dados estruturados 
e semiestruturados.
Spark Streaming
Spark Streaming aproveita a capacidade de processamento rápido da Spark Core 
para executar os processamentos. Permite a execução e transformações RDD (Solids 
Distributed Datasets) nesses pedações menores de dados e lotes de processamento.
MLlib (Biblioteca de Machine Learning)
MLlib é uma biblioteca de aprendizagem por máquina distribuída que roda sobre a 
arquitetura de Spark baseada em memória distribuída. O Spark MLlib é nove vezes mais 
rápido que a versão baseada em HDFS e disco do Hadoop do Apache Mahout (antes do 
framework Mahout implementar a interface com Spark). Cabe destacar que a biblioteca 
MLib possui uma grande quantidade de funções e algoritmos para aprendizado por máquina.
GraphX
GraphX é uma estrutura distribuída de processamento de gráficos sob a arquitetura 
Spark. Ele fornece uma API para computação gráfica que pode modelar os gráficos 
definidos pelo usuário usando a API de abstração Pregel. Ele também fornece um tempo 
de execução otimizado para essa abstração.
Spark R
Essa funcionalidade permite que usuários da plataforma ou software R utilizem 
funções ou funcionalidades Spark de maneira mais usual.
18
19
Resilient Distributed Datasets 
O Resilient Distributed Datasets (RDD) é o conceito central da plataforma Spark. Foi 
desenvolvido para suportar o armazenamento de dados na memória e distribuído em um 
cluster, que implementa sua tolerância a falhas, devido, em parte, ao seu rastreamentode dados brutos ou processamentos.
Instalação do Spark
O framework Spark necessita, para sua execução básica, da linguagem Java, a 
linguagem Scala e a linguagem Python instaladas no sistema operacional. Para essa 
aula, parte-se do pressuposto de que temos uma máquina com o sistema operacional 
Linux e Hadoop instalado e em execução.
Será necessária a verificação se a linguagem Java está instalada e as variáveis de 
ambiente JAVA_HOME.
Para essa verificação, executamos os seguintes comandos:
java -version
E para a verificação da variável de ambiente JAVA_HOME, executa-se:
$JAVA_HOME
Nesse caso, os retornos dos comandos serão respectivamente:
Figura 6
Para a instalação da linguagem Scala deve-se fazer o download através do comando:
wget: https://goo.gl/kaxqKS
19
UNIDADE 
Projetos Mahout e Spark 
Após o término do download, pode-se copiar o arquivo para a pasta de trabalho já 
criada anteriormente /usr/local/
Descompacte o arquivo através do comando:
tar zxvf scala-2.12.3.tgz
Deve-se então criar a variável SCALA_HOME, para isso deve-se acrescentá-la no 
arquivo ~/bashrc ou /etc/profile
Acrescentam-se as linhas:
SCALA_HOME=/usr/local/ scala-2.12.3
export SCALA_HOME
Cabe ainda a edição da variável PATH, acrescentando-se a linha a seguir nos arquivos 
~/.bashrc ou /etc/profile
export PATH=$SCALA_HOME/bin:$PATH 
Agora se pode então fazer download da plataforma Spark, seja através do site ou 
através do comando:
wget: https://goo.gl/ERLM95
Após o download, copie o arquivo para o diretório /usr/local/
Descompacte o arquivo através do comando:
tar zxvf spark-2.2.0-bin-hadoop2.7.tgz
Crie um link simbólico do diretório recém-descompactado/criado para spark, através 
do comando:
ln -s /usr/local/ scala-2.12.3 /usr/local/spark
Crie a variável de ambiente SPARK_HOME e edite a variável PATH, acrescentando 
o diretório de bin do Spark, seguem as linhas que poderão ser adicionadas nos arquivos 
~/bashrc ou /etc/profile:
20
21
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin
Após esses comandos, você poderá reler o arquivo .bashrc ou /etc/profile ou 
simplemenste efetuar logout do usuário e acessar novamente com o usuário hadoop-
user, de modo que as variáveis de ambiente sejam recarregadas.
Após isso, o Spark estará instalado em sua maneira mais simples, para a execução 
dos exemplos e de modo stand-alone.
Para acessar o shell de execução dos exemplos, utilize o comando “spark-shell”, 
ele carregará o ambiente e liberará um shell para a linguagem scala. Lembrando que o 
serviço Hadoop deverá estar em execução no ambiente. Para o teste mais simples, no 
sheel liberado, execute:
println(“Olá, mundo!”)
sc.version
Caso não apareça nenhuma mensagem de erro, o ambiente foi instalado corretamente.
Execução de exemplo com o Spark:
Vamos executar dois exemplos na plataforma Spark, ambos usando a linguagem 
Scala, largamente utilizada em projeto Spark.
Execução de exemplo de WordCount em Scala:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
val txtFile = “/ola.txt”
val txtData = sc.textFile(txtFile)
txtData.cache()
txtData.count()
val wcData = txtData.flatMap(l => l.split(“ “)).map(word => (word, 1)).reduceByKey(_ 
+ _)
wcData.collect().foreach(println)
21
UNIDADE 
Projetos Mahout e Spark 
Para o exemplo, foi usado o mesmo arquivo utilizado no exemplo de execução do 
wordCount com Hadoop, embora possa servir-se de qualquer arquivo com texto plano 
que se queira executar, desde que seja inserido anteriormente no sistema de arquivos do 
Hadoop, o HDFS. Note pelo código que é carregado o arquivo dentro do HDFS. Segue 
a saída dos comandos:
Figura 8
(Professor,1)
(Educação,1)
(Sul.,1)
(a,1)
(Cruzeiro,2)
(do,2)
(hadoop.,1)
(Alberto.,1)
(,1)
(Universidade,1)
(Olá,1)
(Sul,1)
(distância.,1)
(mundo,1)
Execução de exemplo de uso de Kmeans em Scala:
Segue mais um código de exemplo do uso da implementação do algoritmo kmeans 
para uma base de dados pequena de leitura de sensor de temperatura e luminosidade ao 
longo de um dia:
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.clustering.{KMeans, KMeansModel}
import org.apache.spark.mllib.linalg.Vectors
val data = sc.textFile(“/node252.csv”)
val parsedData = data.map(s => Vectors.dense(s.split(‘;’).map(_.toDouble))).cache()
val numIterations = 20
val numClusters = 1
val clusters = KMeans.train(parsedData, numClusters, numIterations)
val WSSSE = clusters.computeCost(parsedData)
println(“Within Set Sum of Squared Errors = “ + WSSSE)
println (clusters.toPMML())
22
23
Segue a descrição das principais linhas de código:
• val data = sc.textFile(“/node252.csv”): carrega o arquivo CSV com as leituras de 
sensores, nesse caso com as colunas “0” “13” “43” “24.154” “5”, sendo que as 
colunas representam respectivamente “hora”, “minuto”, “segundo”, “temperatu-
ra” e “luminosidade”.
• val parsedData = data.map(s => Vectors.dense(s.split(‘;’).map(_.toDouble))).cache(): 
essa linha de código divide as linhas do arquivo em vetores, usando o caracter “;”.
• val numIterations = 20: define o número máximo de interações do algoritmo kmeans;
• val numClusters = 1: quantidade de clusters ou “k” para o algoritmo;
• val clusters = KMeans.train(parsedData, numClusters, numIterations): linha de 
código que chama a execução do algoritmo kmeans, já implementado pelo Mlib 
presente no Spark;
• val WSSSE = clusters.computeCost(parsedData): calcula o erro RMS do modelo 
gerado e o insere na variável WSSSE;
• println (clusters.toPMML()) = note que a função toPMML retorna o modelo 
de clusters com os centroides gerados no formato Predictive Model Markup 
Language (PMML), que pode ser usado em outras ferramentas;
Segue a saída da execução dos comandos:
Equipe de diagramação: segue a imagem e logo em seguida o texto de saída; veja o 
que é melhor para a diagramação do conteúdo, usando um ou outro.
Figura 9
23
UNIDADE 
Projetos Mahout e Spark 
<?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?>
<PMML version=”4.2” xmlns=”http://www.dmg.org/PMML-4_2”>
 <Header description=”k-means clustering”>
 <Application name=”Apache Spark MLlib” version=”2.2.0”/>
 <Timestamp>2017-09-28T22:33:44</Timestamp>
 </Header>
 <DataDictionary numberOfFields=”5”>
 <DataField name=”field_0” optype=”continuous” dataType=”double”/>
 <DataField name=”field_1” optype=”continuous” dataType=”double”/>
 <DataField name=”field_2” optype=”continuous” dataType=”double”/>
 <DataField name=”field_3” optype=”continuous” dataType=”double”/>
 <DataField name=”field_4” optype=”continuous” dataType=”double”/>
 </DataDictionary>
 <ClusteringModel modelName=”k-means” functionName=”clustering” 
modelClass=”centerBased” numberOfClusters=”2”>
 <MiningSchema>
 <MiningField name=”field_0” usageType=”active”/>
 <MiningField name=”field_1” usageType=”active”/>
 <MiningField name=”field_2” usageType=”active”/>
 <MiningField name=”field_3” usageType=”active”/>
 <MiningField name=”field_4” usageType=”active”/>
 </MiningSchema>
 <ComparisonMeasure kind=”distance”>
 <squaredEuclidean/>
 </ComparisonMeasure>
 <ClusteringField field=”field_0” compareFunction=”absDiff”/>
 <ClusteringField field=”field_1” compareFunction=”absDiff”/>
 <ClusteringField field=”field_2” compareFunction=”absDiff”/>
 <ClusteringField field=”field_3” compareFunction=”absDiff”/>
 <ClusteringField field=”field_4” compareFunction=”absDiff”/>
 <Cluster name=”cluster_0”>
24
25
<Array n=”5” type=”real”>10.6708446866485 29.565122615803816 
29.22615803814714 24.088965485921044 34.92624886466848</Array>
 </Cluster>
 <Cluster name=”cluster_1”>
 <Array n=”5” type=”real”>12.97875080489375329.465228589826143 
29.587250482936252 24.74901287830118 277.62137797810686</Array>
 </Cluster>
 </ClusteringModel>
</PMML>
Esse formato exibe os centroides de cada cluster do modelo gerado, com seus 
respectivos valores de atributos.
Vamos fazer o experimento para validarmos o melhor valor de clusters para o modelo 
em questão, partindo da quantidade de Clusters em 1 e indo até 19:
Figura 10
O decaimento do erro RMS demonstra que a quantidade de clusters ideal é 5, quando 
ocorre o joelho da curva.
Bem como o informado anteriormente quanto ao framework Mahout, as 
implementações, sejam do projeto Spark ou outros projeto futuros de Big Data ou 
novas tecnologias, suas aplicações em projetos reais dependerão de integrações ou 
implementações específicas, intrínsecas ao modelo de negócio ou a tecnologias utilizadas.
25
UNIDADE 
Projetos Mahout e Spark 
Orientações para Leitura Obrigatória
Consiste na inserção do conteúdo em um contexto referente à(s) leitura(s) obrigatória(s) 
que será(ão) indicada(s), demonstrando e ressaltando a relação dessa(s) para a formação 
pessoal e profissional do aluno. A introdução – ou preâmbulo, no caso dos cursos da 
área de Direito – pode ser apresentada por meio de uma narrativa descritiva, uma 
situação-problema, um exemplo de aplicação, entre outros
Segue o link para leitura obrigatória sobre o framework mahout desenvolvido pela IBM
https://goo.gl/MrxUue
Segue o link de palestra como obrigatória sobre o framework mahout, evento promovido 
e disponibilizado pela InfoQ:
https://goo.gl/g9sGvp
Lista de exercícios “Hands-on Exercises” do curso de Data Analytics, a parte específica de 
interação inicial com Spark:
https://goo.gl/W1PoU5
Segue como leitura obrigatória os capítulos 1 e 2 do livro Getting Started with Apache Spark, 
https://goo.gl/Qs3EBs
Segue como leitura obrigatória o capítulo 3 do livro Getting Started with Apache Spark, 
https://goo.gl/Qs3EBs
26
27
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
 Sites
Descobrindo o Apache Mahout
Este artigo irá abordar os aspectos principais da ferramenta Apache Mahout, criada 
com base no Apache Hadoop, e mostrará exemplos de como usar essa ferramenta para 
aplicações de recomendação, clustering e classificação de dados.
https://goo.gl/32cyuw
Mahout Scala BindingsandMahout Spark Bindingsfor Linear Algebra Subroutines
https://goo.gl/d7GJMe
The most popular way to get Scala is either using Scala through sbt, the Scala build tool, or to use 
Scala through an IDE
https://goo.gl/d7GJMe
Spark Programming Guide
https://goo.gl/yBoqzU
Códigos abertos de exemplo de implementação de algoritmos e uso das implementações 
existentes no Framework Spark.
https://goo.gl/rLGS5x
Clustering - spark.mllib
https://goo.gl/eYJ2v2
Hands-on Exercises: Appendix - Introduction to the Scala Shell
https://goo.gl/tigt9T
Hands-on Exercises: Introduction
https://goo.gl/5MvBuH
27
UNIDADE 
Projetos Mahout e Spark 
Referências
OWEN, Sean; ANIL, Robin; DUNNING, Ted; FRIEDMAN, Ellen. Mahout in Action. 
Manning Publications Co., Greenwich, CT, USA, 2011.
SCOTT, J. A., Get started with apache spark, MapR Technologies, Primeira 
Edicção, 2015, acessado em 20/08/2017, disponível em http://info.mapr.com/rs/
mapr/images/Getting_Started_With_Apache_Spark.pdf
Tutorials point Simplyeasylearning, Acessado em 20/08/2017, disponível em: 
https://www.tutorialspoint.com/apache_spark/index.htm
ZECEVIC, Petar; BONACI, Marko. 2016. Spark in Action (1st ed.). Manning 
Publications Co., Greenwich, CT, USA.
28

Mais conteúdos dessa disciplina