Scala中使用ansj分词库编写spark中文版WordCount

配置环境的链接: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,非常)


猜你喜欢

转载自blog.csdn.net/shiheyingzhe/article/details/80785877
今日推荐