搭建sparkmllib开发环境的一些坑-----
阅读原文时间:2021年04月20日阅读:1

sparkmlib是spark用于机器学习开发的包,实现了在分布式的大数据集群上做机器学习的功能,是目前对分布式支持较好的机器学习框架,除此之外支持分布式的机器学习框架还有tensorflow和deeplearning4j,但sparkmllib天生和hadoop无缝结合,不过sparkmllib的短板是无法支持深度学习,而tensorflow和deeplearning是支持深度学习的。

好了废话不多说,直接干

sparkmllib的开发环境建议搭建在ubantu,或者centos上,不要windows

不要windows!!!,不要windows!!!,不信你可以试试,死了别怪我没提醒。

1,安装centos和ubantud开发环境,可以是真机,也可以是虚拟机

2,安装jdk,建议安装jdk8且版本与IDEA的版本对应

3去IDEA官网下载linux版本的tar包,百度centos或者ubantu安装IDEA这个简单

4下载scala,配置环境变量,忘了百度

然后重点的坑

1pom文件建好后,没有jdk和scala

第一步,点击file,找到project structure设置全局变量和全局包

第二步看图

在settings找到plugins看看IDEA是否已经集成了scala

右击工程名,找到AddFrameworkSupport

找到scala,勾选,点击ok搞定,这下,工程里面就有scala了,用本地的,省得用pom文件去导入,太麻烦

整pom文件

只是导入sparkmllib就行,这里是测试,其他的spark依赖,都可以自动导入,网上有一个版本导入包太多,容易引起scala冲突,这算一个大坑

上清华镜像的官网,下载本地的spark。里面有数据

下载13M的那个,上传解压

测试程序如下:

package com.my.mllib.test

import org.apache.spark.ml.clustering.KMeans
import org.apache.spark.sql.SparkSession

/**
* Created by baohe on 17-7-21.
* Taking is cheap, fuck the code.
*/
object Hello {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder
      .appName(s"${this.getClass.getSimpleName}")
      .master("local")
      .getOrCreate()

    // $example on$
    // Loads data.
    val dataset = spark.read.format("libsvm").load("/root/spark-2.1.1/data/mllib/sample_kmeans_data.txt")

    // Trains a k-means model.
    val kmeans = new KMeans().setK(2).setSeed(1L)
    val model = kmeans.fit(dataset)

    // Evaluate clustering by computing Within Set Sum of Squared Errors.
    val WSSSE = model.computeCost(dataset)
    println(s"Within Set Sum of Squared Errors = $WSSSE")

    // Shows the result.
    println("Cluster Centers: ")
    model.clusterCenters.foreach(println)
    // $example off$

    spark.stop()
  }
}

运行报错

原因是pom文件中的scope选项是需要本地有spark环境的,我的本地没有真实的spark所以注释掉

然后就成功了

聚类得到的中心点也输出了

本地测试成功,不要得意,现在的代码还不能打包成jar,不能再集群上运行只是一个玩具