文章目录
- 1. 下载资料准备
- 2. 建立项目、添加环境设置
- 3. 第一个 Spark 程序
学自:Spark机器学习实战
https://book.douban.com/subject/35280412/
记录一下踩过的坑:
环境:win 10 + java 1.8.0_281 + Scala 2.11.11 + Hadoop 2.7.7 + Spark2.4.7
1. 下载资料准备
配套代码下载:https://www.epubit.com/bookDetails?id=UB72279bcfb49b8
下载 jar 包(注意版本2.11是scala的,2.4.7是spark的,根据你的版本改下面的下载链接就行)
https://repo1.maven.org/maven2/org/apache/spark/spark-streaming-flume-assembly_2.11/2.4.7/spark-streaming-flume-assembly_2.11-2.4.7.jar
https://repo1.maven.org/maven2/org/apache/spark/spark-streaming-kafka-0-10-assembly_2.11/2.4.7/spark-streaming-kafka-0-10-assembly_2.11-2.4.7.jar
jfreechart-1.0.19 下载,lib文件夹内有2个jar文件
放到下面路径,spark 安装路径下
2. 建立项目、添加环境设置
- 创建文件夹路径,考入配套代码文件
D:\spark-2.4.7-bin-hadoop2.7\examples\src\main\scala\spark\ml\cookbook\chapter1
使用 idea 在 examples 文件夹下创建 maven 项目
设置 scala 文件夹为 Sources Root
设置 project structure
然后就可以 run 了,没有报错!
3. 第一个 Spark 程序
// package 打包
package spark.ml.cookbook.chapter1// 导入 SparkSession 上下文
import org.apache.spark.sql.SparkSession
import org.apache.log4j.Logger
import org.apache.log4j.Level // 减少输出内容object MyFirstSpark20 {def main(args: Array[String]): Unit = {// 输出日志级别为 error,减少输出Logger.getLogger("org").setLevel(Level.ERROR)// 使用 Builder 模型,指定配置初始化 SparkSession,作为访问Spark集群的入口val spark = SparkSession.builder.master("local[*]").appName("myFirstSpark20").config("spark.sql.warehouse.dir", ".").getOrCreate()// 以上为创建 SparkSession 的典型方法val x = Array(1.0,5.0,8.0,10.0,15.0,21.0,27.0,30.0,38.0,45.0,50.0,64.0)val y = Array(5.0,1.0,4.0,11.0,25.0,18.0,33.0,20.0,30.0,43.0,55.0,57.0)// 创建数组的 RDDval xRDD = spark.sparkContext.parallelize(x)val yRDD = spark.sparkContext.parallelize(y)// 创建新的 打包后的 rddval zipedRDD = xRDD.zip(yRDD)zipedRDD.collect().foreach(println)// (1.0,5.0)// (5.0,1.0)// ...val xSum = zipedRDD.map(_._1).sum()val ySum = zipedRDD.map(_._2).sum()val xySum = zipedRDD.map(c => c._1 * c._2).sum()val n = zipedRDD.count()println("RDD X Sum: " +xSum) //314.0println("RDD Y Sum: " +ySum) //302.0println("RDD X*Y Sum: "+xySum) // 11869.0println("Total count: "+n) // 12spark.stop() // 退出程序,释放资源}
}