spark的jieba分词

本文介绍如何在Spark环境中集成Jieba分词工具,实现大规模文本数据的高效分词处理。通过定义Spark配置、创建SparkSession、自定义分词UDF,将分词结果添加到DataFrame中,最后保存至Hive表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import com.huaban.analysis.jieba.{JiebaSegmenter, SegToken}
import com.huaban.analysis.jieba.JiebaSegmenter.SegMode
import org.apache.spark.SparkConf
import org.apache.spark.sql.functions.{col, udf}
import org.apache.spark.sql.{DataFrame, SparkSession}

object JiebaKry {
  def main(args: Array[String]): Unit = {
    //    定义结巴分词类的序列化
    val conf = new SparkConf()
      .registerKryoClasses(Array(classOf[JiebaSegmenter]))
      .set("spark.rpc.message.maxSize","800")
    //    建立sparkSession,并传入定义好的conf
    val spark = SparkSession
      .builder()
      .appName("Jieba Test")
      .enableHiveSupport()
      .config(conf)
      .getOrCreate()


    //    定义结巴分词的方法,传入的是DataFrame,输出的DataFrame会多一列seg(即分好词的一列)
    def jieba_seg(df:DataFrame,colname:String): DataFrame ={
      val segmenter = new JiebaSegmenter()
      val seg = spark.sparkContext.broadcast(segmenter)
      val jieba_udf = udf{(sentence:String)=>
        val segV = seg.value
        segV.process(sentence.toString,SegMode.INDEX)
          .toArray()
          .map(_.asInstanceOf[SegToken].word)
          .filter(_.length>1)
      }
      //seg列出来的数据都是Array[String]
      df.withColumn("seg",jieba_udf(col(colname)))
    }
    //    从hive中取新闻数据
    val df = spark.sql("select content,label from badou.new_no_seg limit 300")
    val df_seg = jieba_seg(df,"content")
    df_seg.show()
    df_seg.write.mode("overwrite").saveAsTable("badou.news_jieba")

//    val rdd1 = df.rdd.map(x=>(x(0).toString,x(1).toString))
//    rdd1.filter(_._1>1)
//    df.filter(col("content")>1)
  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值