來源:北大青鳥總部 2022年12月19日 13:46
小編在學(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)鍵詞。