在Windows10中搭建部署Scala编写spark的使用环境
在Scala中编写spark的程序,需要安装好Java、spark、hadoop、Scala这些环境才可以,spark、hadoop都是依赖Java的,spark的开发语言是Scala,支持用Java、Scala、python这些语言来编写spark程序,本文讲述配置Scala语言编写spark代码的过程,文中的Java版本是Java SE 1.8,spark版本是2.3.1,Scala版本用的是插件。为了方便编写和调试,这里安装的IDE是IntelliJ IDEA Community Edition。Scala编写spark程序有几种方式,一种是使用SBT环境,另一种是使用Maven环境,这里讲的是使用Maven环境。
这里安装Java、spark、hadoop和另一篇文章是相同的步骤spark2.3在Windows10当中来搭建python3的使用环境pyspark
- 首先需要安装Java
到官网下载并安装Java Standard Edition即Java SE1.8.本,这里下载的是window64位版本JDK,点击打开链接,
设置环境变量
安装过程中按照默认配置就好,安装好以后,配置Java的环境变量,右键我的电脑,依次点击属性-高级系统设置-环境变量
新建用户变量: JAVA_HOME;C:\Program Files\Java\jdk1.8.0_171
在系统变量中找到Path,点击按钮新建,然后添加文字%JAVA_HOME%\bin,最后按回车Enter,一直点击确定,就保存了更改,这样就将bin文件夹中的Java程序放到了系统变量中。
当出现图中所示时Java安装配置完成
- 下载安装并配置Spark
从官方网站Download Apache Spark™下载相应版本的spark,因为spark是基于hadoop的,需要下载对应版本的hadoop才行,这个页面有对hadoop的版本要求,点击Download Spark: spark-2.3.1-bin-hadoop2.7.tgz就可以下载压缩包了,对应的hadoop版本要在Hadoop2.7及其以后。
这里解压到D:\spark-2.3.1-bin-hadoop2.7,为了后续操作简便,这里将解压以后的文件夹名称改为spark,这样解压的路径就是D:\spark
配置环境变量
右键我的电脑,依次点击属性-高级系统设置-环境变量新建用户变量 SPARK_HOME D:\spark
找到系统变量Path 点击按钮新建,然后添加文本%SPARK_HOME%\bin,按回车enter,继续新建一个,添加文本%SPARK_HOME%\sbin,按键回车,一直点击确定,就保存了更改,这样就将bin、sbin文件夹中的程序放到了系统变量中
pyspark:到这里spark的配置完成了一部分,还有pyspark需要配置,pyspark等anaconda安装后在下文中讨论,pyspark的安装有几种方式,其中解压以后的spark文件夹中就有pyspark库,可以安装到python的库当中去;还可以不复制,pyspark可以通过pip单独安装,还有一种是单独下载pyspark的安装包,解压以后安装到python库当中去。
- 安装并配置Hadoop
上面安装spark的时候有对hadoop的版本要求,这里要求的是2.7及以后的版本,进入官方网站Apache Hadoop Releases下载2.7.6 binary版本,其中source版本是该版本hadoop的源代码,下载以后解压到D:\hadoop-2.7.6,为了后续操作方便,解压以后修改文件夹名称为hadoop,这样文件夹就是D:\hadoop
配置环境变量:
右键我的电脑,依次点击属性-高级系统设置-环境变量新增用户变量 HADOOP_HOME D:\hadoop
然后找到系统变量Path 点击按钮新建,然后添加文本%HADOOP%\bin,按回车enter,继续新建一个,添加文本%HADOOP%\sbin,按键回车,一直点击确定,就保存了更改,这样就将bin、sbin文件夹中的程序放到了系统变量中
从网站中下载点击打开链接一个压缩包,然后解压出来,复制其中的winutils.exe和winutils.pdb到hadoop的安装文件夹中,复制目录为:D:\hadoop\bin,复制到这个目录中
当输入命令pyspark出现以下结果时表明spark安装配置完成了
- 安装配置IntelliJ IDEA Community Edition
进入官方网站Download IntelliJ IDEA:The Java IDE,下载社区版的,按照默认配置安装就好,如果是32位的电脑,就勾选32位,64位的勾选64位。打开以后安装插件Scala,这里没有安装的话,需要等进入界面以后再安装。这里是使用Maven来构建相应的Scala编写环境
下一步点击Configure里面的settings
点击插件Plugins,输入Scala搜索插件,点击右侧的install安装,之前已经安装了,就可以不点击,之后需要安装什么插件,都可以通过File-Default Settings-Plugins来查找安装
修改字体这些在Settings-Editor-Font当中
修改编码为utf-8
新建一个项目点击Create New Project
然后需要配置Java的环境,依次点击Maven-New...,然后进入Java的安装目录C:\Program Files\Java,选择jdk1.8.0_171以后,点击OK,然后点击Next
填入相应信息
选择好项目所在的位置然后点击OK
这里需要注意的是,必须点击Enable Auto-Import,没有这个弹窗的话,需要自己点击最右下角的气泡标志,然后点击Enable Auto-Import
配置包和编译器Project Structure
点击File-Project Structure,也可以右键项目点击Open Module Settings进入,Project中的SDK要是选中的Java版本
点击Libraries,然后点击+号,点击下拉链的Kotlin/JS,进入spark的安装目录D:\spark\jars中,选中jars目录中的所有jar包,可以先点击第一个,然后按住shift键,拖动下拉链,点击最后一个jar包,这样就全都选中了,然后一直点击OK,等待配置完成。
配置好以后显示这个
接着依次点击Global Libraries-Scala SDK
然后选择Maven,一直点击OK
右键新加入的SDK,点击Copy to Project Libraries
创建WordCount文件夹,并作为Sources Root
然后在项目中右键src,依次点击New-Directory,新建一个目录命名为WordCount
右键新建立的目录,依次点击Make Directory as-Sources Root,就可以在这个目录中编辑源文件,设置好这一步以后,WordCount目录的颜色会变为蓝色。
新建配置文件和Scala代码
右键WordCount文件夹,新建一个Scala class
类型要选择Object类型的才可以
然后点击右侧的Setup JDK点击OK就行
进入pom.xml的编辑状态,粘贴以下代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>dblab</groupId>
<artifactId>WordCount</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<spark.version>2.3.1</spark.version>
<scala.version>2.11.8</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.ansj</groupId>
<artifactId>ansj_seg</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
黏贴好后,右键点击工程文件夹,更新一下文件,按下图操作,点击Generate Sources and Update Folders
等待配置完成,右下角会有进度条显示,可以点击查看具体情况,如果有起泡标志,必须点击蓝色字体Enable Auto-Import
安装ansj中文分词库:
在项目官网中https://github.com/NLPchina/ansj_seg下载最新版ansj_seg-5.1.6.jar,在网站下载最新版nlp-lang-1.7.7.jar,jar包都放在项目的目录中D:\IdeaProjects
然后添加jar包到项目当中来,点击File-Project Structure,也可以右键项目点击Open Module Settings进入,点击Libraries,然后点击右边的+号,点击Kotlin/JS,进入项目目录,选中两个jar包,点击OK,然后点击JS file,最后一直点击OK,将jar包都导入进来。
编写Scala代码并运行:
import org.apache.spark.{SparkContext,SparkConf}
import org.apache.spark.rdd.RDD
import scala.io.Source
import org.ansj.library.DicLibrary
import org.ansj.recognition.impl.StopRecognition
import org.nlpcn.commons.lang.tire.library
import org.ansj.splitWord.analysis.ToAnalysis
object WordCount {
val False: Boolean = False
def main(args: Array[String]) {
System.setProperty("spark.ui.showConsoleProgress", "False")
//----添加自定义词典----
// val dicfile = raw"/xxx/xxx/ExtendDic" //ExtendDic为一个文本文件的名字,里面每一行存放一个词
// for (word <- Source.fromFile(dicfile).getLines) { DicLibrary.insert(DicLibrary.DEFAULT,word)} //逐行读入文本文件,将其添加到自定义词典中
DicLibrary.insert(DicLibrary.DEFAULT, "小王子")
val filter = new StopRecognition()
filter.insertStopNatures("w") //过滤掉标点
val file = Source.fromFile (raw"D:\中文停用词库.txt")
for(x<- file.getLines()){
filter.insertStopWords(x.toString())
}
// ----构建spark对象----
val conf = new SparkConf().setAppName("TextClassificationDemo").setMaster("local[2]")
val sc = new SparkContext(conf)
//----读入要分词的文件----
val filename = raw"d:\WordCount.txt"
val TXTFile = sc.textFile(filename) // 用sc读入文件,此时文件的数据是RDD结构,注意textFile只能读UTF-8编码
val splited = TXTFile.map(x => ToAnalysis.parse(x).recognition(filter).toStringWithOutNature(" "))
val wordCount = splited.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).map(x => (x._2, x._1)).sortByKey(ascending = False)
val choose=wordCount.take(100)
choose.foreach(println)
}
}
使用Ctrl+Shift+F10快捷键run代码,可以得到输出结果:
(419,小王子)
(361,说)
(219,一个)
(202,没有)
(194,我的)
(134,说道)
(124,星星)
(118,会)
(118,花)
(114,画)
(104,星球)
(84,羊)
(80,地方)
(78,国王)
(73,中)
(72,你的)
(72,狐狸)
(68,知道)
(68,象)
(67,想)
(65,回答)
(63,一只)
(62,真)
(60,非常)
参考内容:
ansj分词史上最详细教程
https://github.com/NLPchina/ansj_seg
利用开发工具IntelliJ IDEA编写Spark应用程序(Scala+Maven)
spark应用开发-开发工具篇
学习大数据的第一步-搭建Scala开发环境,以及使用Intellij IDEA开发Scala程序