學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

一招教你使用Hive處理文本數(shù)據(jù)

來源:北大青鳥總部 2022年12月19日 13:46

摘要: 現(xiàn)在需要對招聘市場不同崗位的核心技能點(diǎn)做一個調(diào)研,針對性的分析崗位描述,把其中關(guān)鍵詞給取出來,出現(xiàn)次數(shù)最多的那幾個關(guān)鍵詞就是該崗位的核心技能關(guān)鍵詞。

小編在學(xué)習(xí)了幾個月的大數(shù)據(jù)之后,終于接到了老板派來的活啦?。?!有核心技術(shù)在手,感覺走路都輕快了許多呢。這個需求呢實(shí)際上非常簡單且明確。

現(xiàn)在老板需要我對招聘市場不同崗位的核心技能點(diǎn)做一個調(diào)研,現(xiàn)在我們手上大概有一些數(shù)據(jù),數(shù)據(jù)是一些招聘相關(guān)的數(shù)據(jù),在數(shù)據(jù)中有一個字段為崗位描述,顧名思義,找過工作的同學(xué)都能知道崗位描述是啥意思,尤其是像你們沒學(xué)大數(shù)據(jù)的同學(xué),可能已經(jīng)翻看了無數(shù)工作機(jī)會還沒有找到工作吧吼吼,小編學(xué)習(xí)完大數(shù)據(jù)之后可是立馬找到工作了呢。

崗位描述實(shí)際就是一段話,表示這個崗位需要應(yīng)聘者具備某些能力或者技能來足以勝任這份工作。有了這個數(shù)據(jù),小編初步的調(diào)研方案是這樣的:

針對性的分析這個字段的數(shù)據(jù),把其中所有的關(guān)鍵詞給取出來,然后按照每一條數(shù)據(jù)對應(yīng)的崗位,根據(jù)崗位進(jìn)行分組計(jì)數(shù),那樣的話我就可以得出每一個崗位對應(yīng)的每一個關(guān)鍵詞出現(xiàn)的次數(shù)了,然后當(dāng)然出現(xiàn)次數(shù)最多的那幾個關(guān)鍵詞就是該崗位的核心技能關(guān)鍵詞啦。計(jì)劃非常完美。

現(xiàn)在的小編滿腦子都是將任務(wù)完美完成,然后得到老板賞識,升值加薪,迎娶白富美的橋段。可是萬事俱備,只欠東風(fēng)。有一個非常重要的問題就是如何將一堆文本(崗位描述)轉(zhuǎn)換成一個個的詞?也就是我們常說的分詞,今天我們就來介紹一下如何完美的完成這個任務(wù)。干貨時間到。


首先這次任務(wù)咱們使用Hive來進(jìn)行數(shù)據(jù)處理和分析,通過查詢Hive文檔發(fā)現(xiàn)Hive內(nèi)置函數(shù)無法實(shí)現(xiàn)分詞,但是Hive提供UDF支持用戶自定義函數(shù)來實(shí)現(xiàn)更多的功能。開發(fā)UDF的過程大致分為(使用Java語言):

  • 創(chuàng)建一個用于編寫UDF的Maven項(xiàng)目

  • 導(dǎo)入相關(guān)大數(shù)據(jù)依賴,其中最重要的是hive-exec和hadoop-common

  • 創(chuàng)建一個類并且繼承自UDF類

  • 重寫類中的evaluate()方法,并且在方法中定義邏輯

  • 對Maven項(xiàng)目進(jìn)行打包,將jar包上傳至HDFS中

  • 在Hive中添加方法關(guān)聯(lián)該jar包中的UDF類,之后就可以使用該方法實(shí)現(xiàn)想要的功能了


需要注意的是,繼承自UDF類,evaluate()方法的輸入是一條數(shù)據(jù),輸出也是一條數(shù)據(jù),可以想象一下就是在Hive中一條數(shù)據(jù)進(jìn)來,經(jīng)過轉(zhuǎn)換后返回一條轉(zhuǎn)換后的數(shù)據(jù),這與我們常用的lower()/upper()函數(shù)類似。在Hive中,還有其他形式的自定義函數(shù)類,比如UDAF、UDTF,其中UDAF是多行輸入返回一行,例如聚合函數(shù)sum()/count(),UDTF是一行輸入返回多行,例如爆炸函數(shù)explode()。具體詳情同學(xué)們自行搜索學(xué)習(xí)吧。

下面開始編寫分詞的UDF,首先當(dāng)然是導(dǎo)入相關(guān)依賴了,實(shí)現(xiàn)分詞的庫有很多,小編選擇的是java常用的IK分詞器,依賴的名稱是ikanalyzer。

之后我們可以定義相關(guān)的黑名單詞和偏好詞,因?yàn)槲覀円罱K得到我們想要的關(guān)鍵詞,那么們最好把一些沒什么用的詞去掉,例如“我的”,“崗位”,“很好”等等這一系列詞存放成黑名單,因?yàn)樽詈笪覀儾幌氚训贸鰜淼年P(guān)鍵詞是這種沒有意義的詞。當(dāng)然偏好詞也有必要,因?yàn)榉衷~工具都是通過一定的語料和算法來進(jìn)行分詞的,它有時候也會將一些詞分錯,例如“機(jī)器學(xué)習(xí)”這個詞,可能分詞工具會將它分為“機(jī)器”“學(xué)習(xí)”這兩個詞,但是很明顯對于崗位來說,這明顯就是一個技能詞,所以我們將這種專有名詞設(shè)置成偏好詞讓分詞器下次遇到這些詞的時候不要分錯。



將停止詞放入stopword.dic中,將偏好詞放入extword.dic中,每一個詞占一行即可,然后在IKAnalyzer.cfg.xml中配置這兩個文件的路徑,之后IK分詞器就會自動的加載我們自定義的停止詞和偏好詞了。



接下來編寫主類UDF。



UDF的大致意思就是對傳入的字符串做分詞,分詞后在通過特殊符號“\001”來對每一個詞進(jìn)行拼接,最終返回一個拼接好的字符串。

根據(jù)開發(fā)UDF的步驟,將UDF打成jar包并上傳到HDFS,并在Hive中創(chuàng)建方法關(guān)聯(lián)該jar包。



總之使用HiveSQL一通十三招將所有的任務(wù)完成,SQL在這就不給大伙兒解釋了,最終我們由原始數(shù)據(jù),得到了最終我們想要的數(shù)據(jù)。




從我們對數(shù)據(jù)的處理和分析結(jié)果來看,算法崗位(job_tag)對關(guān)鍵字(sub)“算法”、“c++”、“機(jī)器學(xué)習(xí)”這些技術(shù)都有相當(dāng)大的需求,因?yàn)樵谒惴◢徫幻枋鲋?,“算法”這個詞出現(xiàn)6366次,“c++”出現(xiàn)3706次,“機(jī)器學(xué)習(xí)”出現(xiàn)3385次,都是出現(xiàn)次數(shù)最高的幾個關(guān)鍵詞。


標(biāo)簽: hive
熱門班型時間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網(wǎng)絡(luò)安全運(yùn)營班 爆滿開班
報(bào)名優(yōu)惠
免費(fèi)試聽
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接