工作专题大数据安全玩转大数据

Spark机器学习实战(一)Spark的环境搭建与简单销售统计应

2017-05-28  本文已影响320人  C就要毕业了

Spark机器学习实战(一)Spark的环境搭建与简单销售统计应用

之前写了一个从零开始学习Spark的系列,一共八篇文章,了解了基本的Scala语言,RDD操作。接下来准备再开一个专题,记录一下Spark用于机器学习的实战Project,目的是将Spark和机器学习用于各个数据集的实战中。

第一部分还是用一个很简单的例子来配通Spark的环境,大致过程与从零开始学习Spark(一)环境配置,实现WordCount一致,只是为了完整性再记录一下。

Spark可以运行在各种集群上,但在这里我们都运行在本地,所以数据集的规模不会太庞大。

这个系列的文章会完成一个完整的系统:利用机器学习为一个电影网站提供数据支持。文章中列出了关键代码,完整代码见我的github repository,这篇文章的代码在chapter01

任务目标

这一部分的例子非常简单,数据集是一个销售报表,格式为:用户名,商品名称,价格,我们需要统计总售货数,用户数量,总收入,以及商品销量排行。数据如下:

John,iPhone Cover,9.99
John,Headphones,5.49
Jack,iPhone Cover,9.99
Jill,Samsung Galaxy Cover,8.95
Bob,iPad Cover,5.49

第1步:配置sbt在IntelliJ下编程环境

打开terminal

查看java版本,由于MacOS自带java,因此无需安装

$ java -version

安装sbt,这是编译scala的工具

$ brew install sbt

查看sbt与scala信息

$ sbt about

下载安装IntelliJ

安装Scala Plugin:打开IntelliJ,在选择项目界面,选择Configure → Plugins → Install JetBrains Plugins,搜索Scala并安装

选择默认SDK:Configure → Project defaults → Project structure,SDK选择Java1.8

至此scala在IntelliJ下的开发环境配置完毕

第2步:配置Spark工具包

下载Spark:下载地址,注意如果已经安装了Hadoop的话要下载对应的版本,下面的命令可以查看Hadoop版本

$ hadoop version

下载完毕后解压并将其放在一个目录下,假设放在/usr/shar/spark-2.1.0-bin-hadoop2.7,那么我们往环境变量中添加Spark方便以后使用

$ vim .bash_profile

加入一行,保存后重启terminal即可

export SPARK_HOME=/usr/shar/spark-2.1.0-bin-hadoop2.7

至此,Spark环境配置完毕,是不是非常方便

第3步:构建我们的应用

首先,IntelliJ下创建sbt项目:打开IntelliJ → Create New Project → Scala → sbt → ProjectName = chapter01 → Create

修改build.sbt,在最后加入一行Spark的包。注意scalaVersion一定要改成2.11,因为Spark2.1.0是基于Scala2.11的,默认的2.12会报错!

name := "chapter01"
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"

让我们先来看一下sbt项目的目录结构

├── build.sbt
├── project
│   ├── build.properties
│   ├── plugins.sbt
│   ├── project
│   └── target
├── src
│   ├── main
│   │   ├── java
│   │   ├── resources
│   │   ├── scala
│   │   └── scala-2.12
│   └── test
│       ├── java
│       ├── resources
│       ├── scala
│       └── scala-2.12
└── target
    ├── resolution-cache
    ├── scala-2.12
    └── streams

我们首先将我们的数据集放在一个新建的data目录中,/data/UserPurchaseHistory.csv

John,iPhone Cover,9.99
John,Headphones,5.49
Jack,iPhone Cover,9.99
Jill,Samsung Galaxy Cover,8.95
Bob,iPad Cover,5.49

我们需要写的代码主要放在/src/main/scala里面

下一步,我们开始写我们的代码,具体细节不用深究,本章节只是为了配通环境

添加文件/src/main/scala/ScalaApp.scala

/**
  * Created by c on 2017/5/28.
  */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._

object ScalaApp {

  def main(args: Array[String]) {
    val sc = new SparkContext("local[2]", "First Spark App")
    val data = sc.textFile("data/UserPurchaseHistory.csv")
      .map(line => line.split(','))
      .map(purchaseRecord => (purchaseRecord(0), purchaseRecord(1), purchaseRecord(2)))

    val numPurchases: Long = data.count()
    val uniqueUsers: Long = data.map { case (user, product, price) => user }.distinct.count()
    val totalRevenue: Double = data.map { case (user, product, price) => price.toDouble }.sum()
    val productsByPopularity = data.map { case (user, product, price) => (product, 1) }
      .reduceByKey((x, y) => x + y).sortByKey(ascending=false).collect()
    val mostPopular = productsByPopularity(0)

    println("Total purchases: " + numPurchases)
    println("Unique users: " + uniqueUsers)
    println("Total revenue: " + totalRevenue)
    println("Most popular product: %s with %d purchases".
      format(mostPopular._1, mostPopular._2))
  }
}

此时,我们在IntelliJ中的ScalaApp.scala代码浏览界面的object旁可以看到一个按钮,按一下就可以直接run了

run project

下方Console中出现如下结果证明运行成功

Total purchases: 5
Unique users: 4
Total revenue: 39.91
Most popular product: iPhone Cover with 2 purchases
上一篇下一篇

猜你喜欢

热点阅读