Spark机器学习-Spark工程搭建

x33g5p2x  于2020-11-06 转载在 Spark  
字(2.9k)|赞(0)|评价(0)|浏览(533)

概述

最近自己在加强AI这块,以前做Java、大数据分析比较多,所以对CDH那套东西都比较熟悉,例如Hadoop、Spark。但Spark这块中的ML用得不是很多,以前项目中,涉及到算法部分,我们往往都会让python系的同事负责。在AI这方面,python语言确实会有比较大的优势。当然,如果你的数据环境是基于Hadoop这些大数据框架来搭建的,我们也会用上spark去做算法这块处理,主要就是用到Pyspark里的Spark ML做数据处理。用Scala写都会相对比较少,我们都知道Spark的源码是用Scala来写的,而且官网都推荐我们用Scala来做开发。自己在早几年就买了《Spark机器学习》这本书,当时只是简单看了一下,由于在项目中很少用到,就没怎么花时间去深入研究。最近在做一些AI的基础整理,所以又重新看回这本书,自己也写写笔记,和大家分享一下。

环境准备

做过Spark开发的朋友都会有这样的感受,需要花很多时间在环境上,各种版本冲突报错,而且还不好找问题。确实,在大数据这些框架,他们经常要整合在一起,不像一些框架,可以把所有组件一起封装起来打包。拿Spark来说,能让Spark跑起来,我们需要安装Jdk、Scala环境,构建工程还需要安装maven工具。如果还需要整合一些存储框架,如hdfs、hive、hbase那些,到时会更麻烦。所以我们在实际项目开发中,都会好好整理组件之间的版本信息。

我们先从简单到复杂,慢慢地搭建起来,先把jdk、scala、maven环境搞好。这里就不是详细介绍这几个环境的安装过程了,这些网上都很多类似的教程。我这里列一下我的环境版本信息:

JDK:java version "1.8.0_151"

Scala:version 2.11.12

maven:Apache Maven 3.6.3

搭建Spark项目的代码工程

创建maven项目工程

新建一个maven project。

选择相应版本的JDK,以及Scala环境。

填写相应信息:

然后下一步,配置maven环境。

最后就可以创建工程了。

稍微等一会,就可以创建好。

创建好后,但发现pom有报错,报错信息如下:

Cannot resolve plugin org.scala-tools:maven-scala-plugin:<unknown>
Cannot resolve plugin org.apache.maven.plugins:maven-eclipse-plugin:<unknown>

我们打开pom.xml文件看看。

好像没有看到标红的地方,那我们先忽略它,到时用得时候,出问题再看看。

创建scala测试类

建好工程后,我们尝试创建一下scala类,看能不能正常使用。

我们会发现,IDEA会默认帮我们创建好一个名为“App.scala"文件。我们直接运行一下,看看是什么效果。

执行运行后,但直接报错了,编译那里就没有通过。看来上面的pom那里报错,还是有影响的。那我们只好深入研究一下,把这个bug先解决了。

println方法标红报错提示。

报错信息:

Error:scalac: Scala compiler JARs not found (module 'SparkMLDemo'): D:\maven_repository_3.63\org\scala-lang\scala-reflect\2.7.0\scala-reflect-2.7.0.jar

详细看了一下,这里说找不到scala-reflect-2.7.0.jar包,这个scala的版本和我们本机装的版本好像不一样。那我们看回pom.xml文件。

看来IDEA没有用我们本地scala环境来生成工程,那我们手动改一下,把版本改回我们自己本机的scala版本,我这里装的是2.11.12,所以pom.xml文件里改成这样。

<properties>
<scala.version>2.11.12</scala.version>
</properties>

然后重新更新maven,根据以下步骤来操作。

pom.xml--》右键--》Mave--》Reimport

重新看回“App.scala”文件,println方法不报错了,但Application那里还是红色报错。

如果对scala比较熟的朋友,可能会了解这种“extends Application”写法,这是scala的Main方法第二种实现方式。但我们一般都不建议这样使用,如果采用这种方法,我们无法向主函数(Main方法)传入参数。所以我们把代码改一下,改成以下方式。

package com.ispeasant
//*/*
/* Hello world!
/*
/*/
object App {
def main(args: Array[String]): Unit = {
println("Hello World!")
}
}

同时我们把“test”里的东西清掉,免得有其它乱七八糟的问题。

删除后,然后运行看看效果。

Hello World!

所以从目前的来看,Scala环境应该是搞好的。

整合spark环境

弄好scala环境后,我们就可以接着弄spark环境,我们现在pom.xml文件里,添加spark相关的jar包。

<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency>

spark版本用的是2.4.0版本,所以需要在pom.xml文件前面添加spark版本变量。

<properties>
<scala.version>2.11.12</scala.version>
<spark.version>2.4.0</spark.version>
</properties>

添加好后,手动更新一下maven。

没问题后,我创建一个新scala文件来测试一下spark环境。

先实现最简单的代码逻辑,创建一个SparkContext,如果创建成功就打印出来。代码如下:

package com.ispeasant
import org.apache.spark.SparkContext
object SparkTest {
def main(args: Array[String]): Unit = {
val sc = new SparkContext("local[2]", "Spark Test")
if (sc != null)
println(sc.toString)
sc.stop()
}
}

然后,我们运行一下,看看结果。

所以我们的Spark环境也没问题了。

相关文章

最新文章

更多