大数据人|大数据第一社区

 找回密码
 注册会员

扫一扫,访问微社区

查看: 620|回复: 0
打印 上一主题 下一主题

Spark中分布式使用HanLP(1.7.0)分词示例

[复制链接]
  • TA的每日心情

    2018-9-28 11:05
  • 签到天数: 1 天

    [LV.1]初来乍到

    109

    主题

    109

    帖子

    570

    积分

    高级会员

    Rank: 4

    积分
    570
    跳转到指定楼层
    楼主
    发表于 2019-5-8 09:50:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    HanLP分词,如README中所说,如果没有特殊需求,可以通过maven配置,如果要添加自定义词典,需要下载“依赖jar包和用户字典".
    分享某大神的示例经验:
    是直接"java xf hanlp-1.6.8-sources.jar" 解压源码,把源码加入工程(依赖本地jar包,有些麻烦,有时候到服务器有找不到jar包的情况)
    按照文档操作,在Spark中分词,默认找的是本地目录,所以如果是在driver中分词是没有问题的。但是如果要分布式分词,是要把词典目录放在HDFS上面,因为这样每台机器才可以访问到 【参考代码】
    最好把新增词典放在首位(没有放在首位好像没有生效).第一次使用时,HanLP会把新增txt文件,生成bin文件,这个过程比较慢。但是只需要跑一次,它会把bin文件写到HDFS路径上面,第二次以后速度就快一些了。
    注意到issue中说,只可以在mapPartition中使用
    参考scala代码
    class HadoopFileIoAdapter extends IIOAdapter {
      override def create(path: String): java.io.OutputStream = {
        val conf: Configuration = new Configuration()
        val fs: FileSystem = FileSystem.get(URI.create(path), conf)
        fs.create(new Path(path))
      }
      override def open(path: String): java.io.InputStream = {
        val conf: Configuration = new Configuration()
        val fs: FileSystem = FileSystem.get(URI.create(path), conf)
        fs.open(new Path(path))
      }
    }
    def myfuncPerPartition_ ( iter : Iterator [String] ) : Iterator[(Int, mutable.Buffer[String])]  = {
          println("run in partition")
          val keyWordNum = 6
          HanLP.Config.IOAdapter = new HadoopFileIoAdapter
          val ret = iter.filter(_.split(",",2).length==2)
            .map(line=>(line.split(",",2)(1).trim.hashCode, HanLP.extractKeyword(line.split(",",2)(0),keyWordNum)
              .map(str=>str.filterNot(stopChar.contains(_))).filter(w=>(w.length>1 || ( w.length==1 && white_single_word.contains(w(0))) ))
              .filterNot(stopWords.contains(_)).take(keyWordNum).distinct))
          ret
        }
    //调用
    raw_data.repartition(100).mapPartitions(myfuncPerPartition_)


    困啊,想睡觉的呢
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条


    id="mn_portal" >首页Portalid="mn_P18" onmouseover="navShow('P18')">应用id="mn_P15" onmouseover="navShow('P15')">技术id="mn_P37" onmouseover="showMenu({'ctrlid':this.id,'ctrlclass':'hover','duration':2})">前沿id="mn_P36" onmouseover="navShow('P36')">宝箱id="mn_P61" onmouseover="showMenu({'ctrlid':this.id,'ctrlclass':'hover','duration':2})">专栏id="mn_P65" >企业id="mn_Nd633" >导航 折叠导航 关注微信 关注微博 关注我们

    QQ|广告服务|关于我们|Archiver|手机版|小黑屋|大数据人 ( 鄂ICP备14012176号-2  

    GMT+8, 2024-4-28 17:44 , Processed in 0.259161 second(s), 29 queries .

    Powered by 小雄! X3.2

    © 2014-2020 bigdataer Inc.

    快速回复 返回顶部 返回列表