8.4.5 算法应用实例

MLlib是一些常用机器学习算法在Spark上的实现,Spark的设计初衷是支持一些迭代的大数据算法。下面通过一个例子使用Mllib支持向量机进行分类,并将程序打包执行,读者可以通过示例开启MLlib之旅。

1.程序代码

使用支持向量机进行分类的代码如下。


  1. import org.apache.spark.SparkContext
  2. import org.apache.spark.mllib.classification.SVMWithSGD
  3. import org.apache.spark.mllib.regression.LabeledPoint
  4. Val SL = new Sparkcontext"Local""SVM""/root"Sep "svm.jar"))
  5. /* 加载和解析样例数据文件 */
  6. val data = sc.textFile"mllib/data/sample_svm_data.txt"
  7. val parsedData = data.map { line =>
  8. val parts = line.split' '
  9. /*将数据转化为标记向量 */
  10. LabeledPointparts0).toDouble parts.tail.mapx => x.toDouble).toArray
  11. }
  12. /* 配置迭代次数为20 */
  13. val numIterations = 20
  14. /* 使用SVMWithSGD类,训练模型。其中使用的优化方法是随机梯度下降(SGD) */
  15. val model = SVMWithSGD.trainparsedData numIterations
  16. /* 使用训练好的模型进行分类预测 */
  17. val labelAndPreds = parsedData.map { point =>
  18. val prediction = model.predictpoint.features
  19. point.label prediction
  20. }
  21. /*统计分类错误并打印 */
  22. val trainErr = labelAndPreds.filterr => r._1 != r._2).count.toDouble / parsedData.count
  23. println"trainError = " + trainErr

与开发Spark应用程序一样,可以在spark-shell中交互式地运行MLlib,也可以把代码打包成一个jar提交到Spark集群中执行。

2.在Spark Shell中运行

在Spark根目录执行bin/spark-shell命令。然后将示例代码复制进Shell。

3.打包为Jar运行

1)新建项目,项目中需要创建一个SVM_TEST类,将使用支持向量机进行分类的代码复制到main函数中,然后配置SparkContext。

2)示例项目下需要有一个sbt配置文件simple.sbt,输入下面的配置项。


  1. name := "SVM_TEST"
  2. version := "1.0"
  3. scalaVersion := "2.10.3"
  4. libraryDependencies += "org.apache.spark" %% "spark-core" % "1.0.0-incubating"
  5. #由于本例使用MLlib底层库,所以需要加入MLlib库依赖
  6. libraryDependencies += "org.apache.spark" %% "spark-mllib" % "1.0.0-incubating"
  7. resolvers += "Akka Repository" at "http://repo.akka.io/releases/"

3)把上述文件组织成一定的目录结构。


  1. ./simple.sbt
  2. ./src
  3. ./src/main
  4. ./src/main/scala
  5. ./src/main/scala/SVM_TEST.scala

4)在示例项目根目录下执行以下操作。

①打包项目。


  1. sbt package

②执行项目。


  1. sbt run

③在控制台得到以下结果。


  1. trainError = 0.40372670807453415
  2. 14/08/26 182622 INFO network.ConnectionManager Selector thread was interrupted
  3. [success] Total time 4 s completed Oct 1 2014 82622 PM