1. 程式人生 > >spark + ansj 對大資料量中文進行分詞

spark + ansj 對大資料量中文進行分詞

    目前的分詞器大部分都是單機伺服器進行分詞,或者使用hadoop mapreduce對儲存在hdfs中大量的資料文字進行分詞。由於mapreduce的速度較慢,相對spark來說程式碼書寫較繁瑣。本文使用spark + ansj對儲存在hdfs中的中文文字資料進行分詞。
    首先下載ansj原始碼檔案,下載地址為https://github.com/NLPchina/ansj_seg,同時需要下載nlp-lang.jar包,下載地址上述網站中可以看到。由於spark傳輸資料必須進行序列化,而ansj中的屬性類都沒有實現序列化,需要將ansj_seg-master/src/main/java/org/ansj/domain中的屬性類AnsjItem、Nature、NewWord、NumNatureAttr、PersonNatureAttr、Term、TermNature、TermNatures分別實現Serializable介面。然後使用maven的mvn install生成ansj_seg-2.0.8.jar包,將編譯的ansj_seg-2.0.8.jar包 和之前下載的nlp-lang-0.3.jar包加入到spark依賴中,spark便可對hdfs中的文字進行分詞。另外,將序列化後編譯的jar上傳至csdn,可以直接下載使用。
例項如下:

import org.apache.spark.SparkContext
import org.ansj.domain.Term
import org.ansj.splitWord.analysis.ToAnalysis
import org.ansj.util.FilterModifWord
import org.ansj.library.UserDefineLibrary
import java.util.Arrays

object TokenTest extends App
{
  val sc = new SparkContext 
  val numpatitions = 100
val text = sc.textFile("/path/to/ChineseFile", numpatitions).map { x => val temp = ToAnalysis.parse(x) //加入停用詞 FilterModifWord.insertStopWords(Arrays.asList("r","n")) //加入停用詞性 FilterModifWord.insertStopNatures("w",null,"ns","r","u","e") val filter = FilterModifWord.modifResult(temp) //此步驟將會只取分詞,不附帶詞性
val word = for(i<-Range(0,filter.size())) yield filter.get(i).getName word.mkString("\t") } text.saveAsTextFile("/pathr/to/TokenFile") }

相關推薦

spark + ansj 料量中文進行

    目前的分詞器大部分都是單機伺服器進行分詞,或者使用hadoop mapreduce對儲存在hdfs中大量的資料文字進行分詞。由於mapreduce的速度較慢,相對spark來說程式碼書寫較繁瑣。本文使用spark + ansj對儲存在hdfs中的中文文字

【機器學習】基於python料量CSV進行操作

在我們日常學習之中,往往會遇到各種各樣的資料。但有時候其龐大的資料量,使得我們無法使用一般的辦公軟體進行操作,與此同時直接將所有資料取到記憶體之中,也有存在溢位的風險。所以,在這種情況下,採用逐行存取的方式對資料進行操作是十分必要的。本文簡單的使用python最為基礎的函式實

料量的處理思路

  最近要用程式對百萬級別的資料量進行處理,綜合性能和程式碼執行時間,來考慮如何書寫高質量的程式碼.   首先就是讀資料的問題,由於資料量比較大,我們可以考慮根據唯一的主鍵id來取資料,這樣速度比較快,而且數量不能太大,讀取Mysql資料庫,資料超過3萬,速度就下降很明顯了

scala 料量排序求中位數 lookup方法

val rdd=sc.makeRDD(Array(1,8,6,4,9,3,76,4)) val sorted = rdd.sortBy(identity).zipWithIndex().map { case (v, idx) => (idx, v) }

Sybase 料量(100W條)頁 jdbc實現目前要求無排序

首次分頁大概為10秒左右。以後翻頁基本上是瞬間完成。要求是無排序情況下。 分析:sybase不提供分頁方法。top函式還不能放在子查詢語句中。使用hibernate分頁前幾頁和後幾頁沒問題,如果資料量大翻到30000頁時就記憶體溢位了。而且效率慢。 使用儲存過程分

Hadoop學習筆記—4.初識MapReduce 一、神馬是高大上的MapReduce   MapReduce是Google的一項重要技術,它首先是一個程式設計模型,用以進行料量的計算。對於資料

Hadoop學習筆記—4.初識MapReduce 一、神馬是高大上的MapReduce   MapReduce是Google的一項重要技術,它首先是一個程式設計模型,用以進行大資料量的計算。對於大資料量的計算,通常採用的處理手法就是平行計算。但對許多開發

SQL Server 使用bcp進行料量匯出匯入

轉載:http://www.cnblogs.com/gaizai/archive/2010/04/17/1714389.html   SQL Server的匯出匯入方式有: 在SQL Server中提供了匯入匯出的介面操作。 在介面操作中又分【複製一個或多個表或檢視的資料】和【編寫查

地方的索引可以讓你的料量的查詢效率飛起來

前言 之前在做專案的時候,接觸到的千萬級以上的表資料不是太多,對於聯合索引的認知不是太深刻,用索引與不用索引以及索引的建立順序和規則之前的區別不是太明顯,最近手頭有優化查詢千萬級資料量的慢sql的任務,優化前,查詢時間達到了60秒,導致前端請求掛起,做了相應的優化後,查詢千萬級別資料時,速度基本保持在零點

根據一個類裡的某個欄位,進行分類(料量

應用情景:貨物類需要按照批次分類,以樹列表形式展示 父列表展示每個批次中任意的一個貨物; 點選該父列表中的某行,下拉展示子列表,子列表展示該行同一批次的所有單號; 小白版解決方案:邏輯分頁 先查詢所有資料到記憶體,再從記憶體擷取需要資料採用程式內部邏

Hadoop學習筆記—4.初識MapReduce 一、神馬是高大上的MapReduce   MapReduce是Google的一項重要技術,它首先是一個程式設計模型,用以進行料量的計算。對於資料

一、神馬是高大上的MapReduce   MapReduce是Google的一項重要技術,它首先是一個程式設計模型,用以進行大資料量的計算。對於大資料量的計算,通常採用的處理手法就是平行計算。但對許多開發者來說,自己完完全全實現一個平行計算程式難度太大,而MapReduce就是一種簡化平行計算的程式設計模

python中文,使用結巴python進行

php 分詞 在采集美女站時,需要對關鍵詞進行分詞,最終采用的是python的結巴分詞方法.中文分詞是中文文本處理的一個基礎性工作,結巴分詞利用進行中文分詞。其基本實現原理有三點:基於Trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG)采用了動態規劃查找最大概率

料量的方案收集--AdMaster 如何駕馭百億級Key實時Redis 叢集

注:本文轉載自公眾號AdMaster 作為技術驅動的營銷資料公司,AdMaster每天處理超過100億的資料請求,每天對1000億資料進行上千種維度計算,每天增加超過5T資料量,為來自各行業的客戶提供7*24小時資料應用服務。在這樣領先的技術佈局下,無論是資料實時性還是資料安全,都能得到

四種快排與兩種歸併和堆和插入排序 料量執行時間比較

#include"iostream" #include"iomanip" #include"stdlib.h" #include"time.h" #include"string" /*由於我電腦記憶體有限所以資料量最大能執行在20w*/ //三路快排適用於有大量重複值的資

資料新增非同步解析重新整理料量redis (——)(五)redisutils

首先要在配置檔案注入這個bean     這也是我非同步重新整理獲取bean用的redisutils工具類: import javax.servlet.ServletContext; import javax.servlet.http.HttpServl

資料新增非同步解析重新整理料量redis (——)(四)非同步重新整理reids主

重新整理redis方法的bean: public class MethodAndParameter {     private String methodName;//方法名          pr

資料新增非同步解析重新整理料量redis (——)(三)Spring Boot普通類呼叫bean【從零開始學Spring Boot】

部落格分類:  從零開始學Spring Boot 從零開始學Spring BootSpring Boot普通類呼叫bean    【視訊&交流平臺】 à SpringBoot視訊 http://stu

資料新增非同步解析重新整理料量redis (——)(二) SpringBoot之CommandLineRunner介面和ApplicationRunner介面

在spring boot應用中,我們可以在程式啟動之前執行任何任務。為了達到這個目的,我們需要使用CommandLineRunner或ApplicationRunner介面建立bean,spring boot會自動監測到它們。這兩個介面都有一個run()方法,在實現介面時需要覆蓋該方法,並使用@

資料新增非同步解析重新整理料量redis (——)(一)Java Collection之Queue佇列

Queue介面與List、Set同一級別,都是繼承了Collection介面。LinkedList實現了Queue接 口。Queue介面窄化了對LinkedList的方法的訪問許可權(即在方法中的引數型別如果是Queue時,就完全只能訪問Queue介面所定義的方法 了,而不能直接訪問 Linke

料量單表在不同表名列名間的資料遷移

(windows Server 2008 R2+oracle 11g) 單表資料1.5億條記錄,90個欄位,檔案大小70G 處理思路:源端單表exp,目標端單表imp,再通過欄位對應關係轉入到目標表(不同表名、列名) exp username1/password1 buffer=6400

afs在料量時查詢優化

afs查詢,mule報錯的問題 1.mule報錯的原因 a)mule預設請求響應時間為10s,當請求返回的時間超過10秒就會報錯 2.導致請求時間過長的原因 a)欄位沒有建索引,count(*)統計記錄總數耗時過長(283W記錄統計耗時8-9s) b)一次性請求數量過多(經測試500條資料4