Apache Mahout é uma biblioteca de machine learning distribuído projetada para trabalhar com grandes volumes de dados. Originalmente focada no ecossistema Hadoop, evoluiu para suportar múltiplas plataformas de computação distribuída.
Mahout oferece implementações escaláveis de algoritmos de machine learning clássicos, incluindo clustering, classificação, filtragem colaborativa e redução de dimensionalidade, otimizados para processamento distribuído.
Foco em MapReduce e Hadoop, algoritmos tradicionais
Transição para Spark, DSL matemático Samsara
Suporte para Flink, GPU acceleration
Modernização, deep learning integration
Exemplo de clustering K-Means com Mahout:
import org.apache.mahout.clustering.kmeans.KMeansDriver
import org.apache.mahout.clustering.kmeans.Kluster
import org.apache.mahout.common.distance.EuclideanDistanceMeasure
import org.apache.mahout.math.{DenseVector, NamedVector, Vector}
import org.apache.spark.SparkContext
import org.apache.mahout.sparkbindings._
import org.apache.mahout.math.scalabindings._
import org.apache.mahout.math.drm._
// Configurar Spark context
implicit val sc = new SparkContext()
// Criar dados de exemplo
val data = drmParallelize(dense(
(1.0, 1.0),
(1.5, 2.0),
(3.0, 4.0),
(5.0, 7.0),
(3.5, 5.0),
(4.5, 5.0),
(3.5, 4.5)
))
// Configurar parâmetros do K-Means
val k = 2 // número de clusters
val maxIterations = 10
val convergenceThreshold = 0.001
// Executar K-Means
val (centroids, assignments) = kmeans(
data,
k = k,
maxIterations = maxIterations,
convergenceThreshold = convergenceThreshold
)
// Mostrar centroids
println("Centroids:")
centroids.collect.zipWithIndex.foreach { case (centroid, idx) =>
println(s"Cluster $idx: ${centroid.toString}")
}
// Mostrar assignments
println("\nAssignments:")
assignments.collect.foreach { case (point, cluster) =>
println(s"Point ${point.toString} -> Cluster $cluster")
}
// Exemplo com Mahout Samsara DSL
import org.apache.mahout.math.scalabindings.RLikeOps._
// Criar matriz distribuída
val drmData = drmParallelize(dense(
(2.0, 3.0, 1.0),
(4.0, 1.0, 2.0),
(1.0, 5.0, 3.0),
(3.0, 2.0, 1.0)
))
// Operações matriciais
val result = drmData.t %*% drmData // transposta multiplicada pela original
val collected = result.collect
println("\nMatrix multiplication result:")
println(collected)
// Decomposição SVD
val (u, v, s) = dsvd(drmData, k = 2)
println(s"\nSVD - Singular values: ${s}")
sc.stop()
Apache Mahout teve desenvolvimento reduzido nos últimos anos. Para novos projetos, considere alternativas como Spark MLlib, que oferece funcionalidades similares com desenvolvimento mais ativo.