10分钟搭建Windows平台Spark开发环境并调试运行Naive Bayes分类程序

本文改编自一篇内部培训资料,让没有接触过大数据的员工可以在10分钟内搭建好Windows上的Spark开发环境,并调试和运行Naive Bayes分类程序。


本文章所需的工具已经打好包(SparkScala开发工具.zip),可以从下面下载:


http://pan.baidu.com/s/1hsibLcg


一 开发环境搭建:


1. 安装JDK 8,点击jdk-8u112-windows-x64.exe安装即可。


2.安装Scala 2.12,点击scala-2.12.0.exe安装。


3.安装Scala SDK,,解压scala-SDK-4.4.1-vfinal-2.11-win32.win32.x86_64.zip到C:\eclipse,并在桌面上创建eclipse.exe的快捷方式。


4.安装Windows版本的Spark,解压spark-2.0.0-bin-hadoop2.7.zip到C:\spark。


5.安装Winutils,解压hadoopbin.zip并放到C:\hadoop\bin路径。


6. 设置环境变量:

设置HADOOP_HOME为C:\hadoop

设置SPARK_HOME为C:\spark


7. 在Scala Eclipse IDE里面创建一个Scala Project,把WordCount.scala文件添加到Proejct里面,并且按下图将spark路径下的jar包都添加到Project的Java Build Path里面。




用Run Configuation运行Word Count例子,就可以看到所有单词的词频输出。


二 运行Naive Bayes分类器


运行分类器代码的方法和运行WordCount例子的方法一致。本文所需的Naive Bayes程序和输入文件可以从GitHub下载:


https://github.com/trendmaster1/SparkNaiveBayes


package Classifiers

import org.apache.spark.rdd.RDD
import org.apache.spark.mllib.classification.NaiveBayes
import org.apache.spark.mllib.classification.NaiveBayesModel
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.sql.SparkSession

// Naive Bayes classification on Spark

class SparkNaiveBayes(sc: SparkContext) {  
    // training function
    def training(trainingData: RDD[LabeledPoint], modelPath: String) {
        // train model
        val model = NaiveBayes.train(trainingData, lambda = 1.0)
        
        // save model
        model.save(sc, modelPath);
    }
    
    // predict function
    def predict(inputData: RDD[LabeledPoint], modelPath: String) = {
        // load model
        val model = NaiveBayesModel.load(sc, modelPath)
       
        // predict
        val predictionAndLabel = inputData.map(p => (model.predict(p.features), p.label))
    
        //compute accuracy
        val accuracy = 1.0 * predictionAndLabel.filter(label => label._1 == label._2).count()
        
        // return result
        (predictionAndLabel, accuracy)
     }   
}

object TestSparkNaiveBayes {
     // set up spark context
    val conf = new SparkConf()   
      .setMaster("local")        
      .setAppName("SparkNativeBayes") 
    val sc = new SparkContext(conf)
 
    val spark = SparkSession
      .builder()
      .config("spark.sql.warehouse.dir", "file:///c:/tmp/spark-warehouse")
      .getOrCreate()   
      
    // define classifier
    val classifier = new SparkNaiveBayes(sc);

    // main function
    def main(args: Array[String]) {
    
    // load data
    val data = sc.textFile("data.txt")
    
    // parse data
    val parsedData = data.map { line =>
      val parts = line.split(',')
      LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))
    }

    val splits = parsedData.randomSplit(Array(0.7, 0.3), seed = 11L)
    
    // set up training data
    val trainingData = splits(0)
    
    //set up test data
    val testData = splits(1)
    
    // train model
    classifier.training(trainingData, "naivebayesmodel")
    
    // predict
    val (predictionAndLabel, accuracy) = classifier.predict(testData, "naivebayesmodel")
    
    println(accuracy)
  }
}


Naive Bayes分类器代码由一个分类器类和一个包含主函数的测试对象组成。为了保证代码在Windows上可以正确运行,特别添加了下面这段代码:


    val spark = SparkSession
      .builder()
      .config("spark.sql.warehouse.dir", "file:///c:/tmp/spark-warehouse")
      .getOrCreate()   


如果没有这段代码,在Windows上运行时会出现一个JVM的相对路径错误的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值