搭建sparkmllib开发环境的一些坑-----

618 阅读2分钟

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设置全局变量和全局包

第二步看图

image.png

Add alt text No alt text provided for this image 在settings找到plugins看看IDEA是否已经集成了scala

image.png

Add alt text No alt text provided for this image 右击工程名,找到AddFrameworkSupport

image.png

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

整pom文件

image.png

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

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

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

测试程序如下:


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()
  }
}

运行报错

image.png

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

image.png

然后就成功了

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

image.png

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