Spark scala编程练习题——HanLP分词统计热词

接上文:
https://blog.csdn.net/qq_38151907/article/details/128110112?spm=1001.2014.3001.5501
中的题目大纲

需求:
查询关键词分析,使用HanLP对所有查询词(字段3)进行分词,按照分词进行分组聚合统计出现次数,结果写入本地/root/retrievelog/output/key/part-00000,格式见步骤说明。

获取搜索词(字段3),进行中文分词;
使用HanLP中文分词库进行分词,对应依赖包为hanlp-portable-1.8.2.jar(见左侧“竞赛信息“-“附件资料“);
统计搜索词出现次数,分组统计次数,词频降序排序;
文件保存路径为:/root/retrievelog/output/key/part-00000,结果无需分区;
示例结果:(69239,物资)表示关键词物资的词频计数为69239。

maven依赖见上文

scala代码如下:

package com.dd.spark

import java.io.{File, PrintWriter}
import java.util

import com.hankcs.hanlp.seg.common.Term
import com.hankcs.hanlp.tokenizer.StandardTokenizer
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object LogAnalyse03 {


  def main(args: Array[String]): Unit = {

    val sparkConf= new SparkConf().setMaster("local[*]").setAppName("LogAnalyse03")

    val sc : SparkContext = new SparkContext(sparkConf)

    //加一个过滤
    val fileRDD: RDD[String] = sc.textFile("D:\\test1128\\reduced.txt")
      .filter(_.split("\t").size==5).filter(_.split("\t")(3).split(" ").size==2)



    val firstRDD: RDD[String] = fileRDD.map( _.split("\t")(2))

    val HanLPRDD: RDD[util.List[Term]] = firstRDD.map(StandardTokenizer.segment(_))

    val StringRDD: RDD[String] = HanLPRDD.map(
      str=>{

        var re=str.get(0).word
        for(i <- 1 to str.size()-1){
          re=re+"|=|"+str.get(i).word
        }
        re
      }
    )


    val value: RDD[String] = StringRDD.flatMap(_.split("\\|=\\|"))

    //wordcount操作
    val wordRDD: RDD[(String, Int)] = value.map((_,1))

    //按照key聚合一下
    val byKeyRDD: RDD[(String, Int)] = wordRDD.reduceByKey(_+_)

    //搞一下排序
    val sortRDD: RDD[(String, Int)] = byKeyRDD.sortBy(_._2,false)

    val writer = new PrintWriter(new File("D:\\test1128\\result03.txt"))
    val tuples = sortRDD.collect()
    for (elem <- tuples) {
      writer.write("("+elem._2 + "," + elem._1 + ")\n")
    }

    sc.stop()

  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MIDSUMMER_yy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值