构建项目步骤

  1. 首先要安装好scala、sbt、spark,并且要知道对应的版本

    • sbt版本可以在sbt命令行中使用sbtVersion查看
    • spark-shell可以知晓机器上spark以及对应的scala的版本
  2. IDEA中plugin安装scala插件

    • pass
  3. 修改配置文件改变IDEA下sbt依赖下载速度慢的问题

    参考官网:

    具体做法:

    1. vi ~/.sbt/repositories
    2. <---加入--->
    3. [repositories]
    4. local
    5. oschina: http://maven.aliyun.com/nexus/content/groups/public/
    6. jcenter: http://jcenter.bintray.com/
    7. typesafe-ivy-releases: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
    8. maven-central: http://repo1.maven.org/maven2/
    9. <---结束--->

    并在IDEA中找到sbt下的VM parameters,往其中加入:

    1. -Xmx2048M
    2. -XX:MaxPermSize=512m
    3. -XX:ReservedCodeCacheSize=256m
    4. -Dsbt.log.format=true
    5. -Dsbt.global.base=/Users/shayue/.sbt (这里应该替换成.sbt所在地址,下同)
    6. -Dsbt.boot.directory=/Users/shayue/.sbt/boot/
    7. -Dsbt.ivy.home=/Users/shayue/.ivy2 (这里应该替换成.ivy2所在地址,下同)
    8. -Dsbt.override.build.repos=true
    9. -Dsbt.repository.config=/Users/shayue/.sbt/repositories

    其中倒数第二句是Jetbrain给出的官方做法,参考https://www.scala-sbt.org/1.0/docs/Command-Line-Reference.html#Command+Line+Options 的最后一行

  4. 通过sbt构建scala项目,选对版本

  5. 修改build.sbt和build.properties,在其中加入适合的版本,并引入Spark依赖

    1. # build.sbt
    2. name := "Name_of_APP"
    3. version := "0.1"
    4. scalaVersion := "2.12.8"
    5. libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.2"
    6. libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.2"
    7. # build.properties
    8. sbt.version = 1.2.4

    其中spark的依赖可以通过spark下载页面找到,或者参考http://spark.apache.org/docs/latest/rdd-programming-guide.html 中的Link with Spark

代码

  1. import org.apache.spark.{SparkConf, SparkContext}
  2. import org.apache.log4j.{Level,Logger}
  3. object ScalaApp {
  4. def main(args: Array[String]) {
  5. //屏蔽启动spark等日志
  6. Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
  7. Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
  8. // 设置数据路径
  9. val path = "/Users/shayue/Sample_Code/Machine-Learning-with-Spark/Chapter01/scala-spark-app/data/UserPurchaseHistory.csv"
  10. // 初始化SparkContext
  11. val sc = new SparkContext("local[2]", "First Spark App")
  12. // 将 CSV 格式的原始数据转化为(user,product,price)格式的记录集
  13. val data = sc.textFile(path)
  14. .map(line => line.split(","))
  15. .map(purchaseRecord => (purchaseRecord(0), purchaseRecord(1), purchaseRecord(2)))
  16. // 求购买总次数
  17. val numPurchases = data.count()
  18. // 求有多少个不同用户购买过商品
  19. val uniqueUsers = data.map{ case (user, product, price) => user }.distinct().count()
  20. // 求和得出总收入
  21. val totalRevenue = data.map{ case (user, product, price) => price.toDouble }.sum()
  22. // 求最畅销的产品是什么
  23. val productsByPopularity = data
  24. .map{ case (user, product, price) => (product, 1) }
  25. .reduceByKey(_ + _ ).collect()
  26. .sortBy(-_._2)
  27. val mostPopular = productsByPopularity(0)
  28. // 打印
  29. println("Total purchases: " + numPurchases)
  30. println("Unique users: " + uniqueUsers)
  31. println("Total revenue: " + totalRevenue)
  32. println("Most popular product: %s with %d purchases" .format(mostPopular._1, mostPopular._2))
  33. }
  34. }

输出:

  1. Total purchases: 5
  2. Unique users: 4
  3. Total revenue: 39.91
  4. Most popular product: iPhone Cover with 2 purchases

参考

  • 第一张VM parameter修改参考https://blog.csdn.net/jameshadoop/article/details/522957109153012.html
  • 代码来自《Spark机器学习》第二版

Spark + sbt + IDEA + HelloWorld + MacOS的更多相关文章

  1. IDEA 学习笔记之 Spark/SBT项目开发

    Spark/SBT项目开发: 下载Scala SDK 下载SBT 配置IDEA SBT:(如果不配置,就会重新下载SBT, 非常慢,因为以前我已经下过了,所以要配置为过去使用的SBT) 新建立SBT项 ...

  2. Eclipse + Idea + Maven + Scala + Spark +sbt

    http://jingpin.jikexueyuan.com/article/47043.html 新的scala 编译器idea使用 https://www.jetbrains.com/idea/h ...

  3. spark入门(helloworld插件)

    1 http://www.cnblogs.com/openfire/archive/2013/04/26/3044722.html 2 在bulid文件夹下,(注意为主目录不是插件下的bulid.xm ...

  4. [转] 用SBT编译Spark的WordCount程序

    问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? [sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需 ...

  5. 用SBT编译Spark的WordCount程序

    问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需要 ...

  6. Spark环境搭建(六)-----------sprk源码编译

    想要搭建自己的Hadoop和spark集群,尤其是在生产环境中,下载官网提供的安装包远远不够的,必须要自己源码编译spark才行. 环境准备: 1,Maven环境搭建,版本Apache Maven 3 ...

  7. sbt安装

    使用 Scala 编写的程序需要使用 sbt 进行编译打包,官网sbt下载解压 在解压路径下创建脚本: #!/bin/bash SBT_OPTS="-Xms512M -Xmx1536M -X ...

  8. Spark和pyspark的配置安装

    如何安装Spark和Pyspark构建Spark学习环境[MacOs] JDK环境 Python环境 Spark引擎 下载地址:Apache-Spark官网 MacOs下一般安装在/usr/local ...

  9. 查看Spark与Hadoop等其他组件的兼容版本

    安装与Spark相关的其他组件的时候,例如JDK,Hadoop,Yarn,Hive,Kafka等,要考虑到这些组件和Spark的版本兼容关系.这个对应关系可以在Spark源代码的pom.xml文件中查 ...

随机推荐

  1. httprunner---->最最基础小白笔记

    1.安装httprunner         pip install httprunner 2.cmd 执行hrun  --startproject Api_api 出现了: 3.Fiddler抓包后 ...

  2. 存储过程:SET Transaction Isolation Level Read语法的四种情况

    这几天一直在弄存储过程,现在在这里跟大伙共享下资料: SET Transaction Isolation Level Read UNCOMMITTED 使用这句东东呢可以分为四种情况,现在就在这里逐一 ...

  3. Nginx location规则匹配

    ^~   标识符匹配后面跟-一个字符串.匹配字符串后将停止对后续的正则表达式进行匹配,如location ^~ /images/ , 在匹配了/images/这个字符串后就停止对后续的正则匹配 = 精 ...

  4. Boostnote跨平台 Markdown 编辑器

    Boostnote 0.11.6 发布了,Boostnote 是一个 Markdown 编辑器,可用于 Mac.Windows.Linux.Android 和 iOS 平台. 新版特性 Dev: 更新 ...

  5. json读写

    import json l = [,,}] print(json.dumps(l)) d = dict(b=None,a=,c='abc') print(json.dumps(d, separator ...

  6. Codeforces Round #495 (Div. 2) A,B,C

    A题 1.新添加一间酒店,要求酒店离已有的最近的一间酒店的距离恰好等于d 2.最左和最右必定存在合适的两种情况 3.酒店之间的情况就要判断两间酒店间的距离: 小于2d,表示无法在这两间酒店中间找到合适 ...

  7. UVA323 Jury Compromise

    思路:背包类DP 提交:3次 错因:没有注意得分的上下界导致 RE 显示 WA 题解: 我们很容易的想到把两种分数做一个差,来尽量背到 \(0\) . 那最大化总分呢?这时我们可以用两种分数的和作为物 ...

  8. 003_linuxC++之_namespace使用

    (一)引入namespace原因: 假如有很多跟人共同完成一项工程,工程中难免会有函数定义一样的名称,不可能一个一个的询问这个函数 你定义过了没有,所以引入namespace #include < ...

  9. 018_查看有多少远程的 IP 在连接本机(不管是通过 ssh 还是 web 还是 ftp 都统计)

    #!/bin/bash#使用 netstat -atn 可以查看本机所有连接的状态,-a 查看所有,-t 仅显示 tcp 连接的信息,-n 数字格式显示# Local Address(第四列是本机的 ...

  10. Vue(一)

    什么是Vue? 用于构建用户界面的渐进式框架