配置环境的链接:spark在Windows10当中部署搭建Scala的使用环境Maven
编写使用的IDE是IntelliJ IDEA Community Edition
- 安装配置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,非常)