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