摘要:學習致謝一數據數據網站二需求針對用戶查詢日志數據中不同字段,使用讀取日志數據,封裝到數據集中,調用函數和函數進行處理不同業務統計分析三分詞工具測試使用比較流行好用的中文分區面向生產環境的自然語言處理工具包,是由一系列模
https://www.bilibili.com/video/BV1Xz4y1m7cv?p=36
數據網站: http: //www.sogou.com/labs/resource/q.php
針對SougoQ用戶查詢日志數據中不同字段,使用SparkContext讀取日志數據,封裝到RDD數據集中,調用Transformation函數和Action函數進行處理不同業務統計分析
使用比較流行好用的中文分區:HanLP,面向生產環境的自然語言處理工具包,HanLP是由一系列模型與算法組成的Java工具包,目標是普及自然語言處理在生產環境中的應用
官方網站:http://www.hanlp.com/ 添加maven依賴
<dependency><groupId>com.hankcsgroupId><artifactId>hanlpartifactId><version>portable-1.7.7version>dependency>
import com.hankcs.hanlp.HanLPimport com.hankcs.hanlp.seg.common.Termimport scala.collection.JavaConverters._object HanLPTest { object HanLPTest { def main(args: Array[String]):Unit = { val words = "[HanLP入門案例]" val terms: util.List[Term] = HanLP.segment(words)//對詞進行分段 println(terms)//直接打印java的List:[[/w,HanLP/nx,入門/vn,案例/n,]/w] println(terms.asScala.map(_.word))//轉為scaLa的List:ArrayBuffer([,HanLP,入門,案例,]) val cleanwords1: String = words.replaceAll("HM[/NN]","")//將"["或"]"替換為空""http://"HanLP入門案例" println(cleanwords1)//HanLP入門案例 println(HanLP.segment(cleanwords1).asScala.map(_.word))//ArrayBuffer (HanLP,入門,案例) val log = """e:00:00 2982199073774412 [360安全衛士] 8 3 download.it.com.cn/softweb/software/firewall/antivirus/20036/179""" val cleanwords2 = log.split("Ils+")(2)//7[360安全衛士] println(HanLP.segment(cleanwords2).asScala.map(_.word))//ArrayBuffer(360,安全衛士) } }}
運行結果
import com.hankcs.hanlp.HanLPimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}import scala.collection.mutable/** * Author * DESC 需求:對SougouSearchLog進行分詞并統計如下指標 * 1.熱門搜索詞 * 2.用戶熱門搜索詞(帶上用戶id) * 3.各個時間段搜索熱度 */object SouGouSearchAnalysis { def main(args: Array[String]): Unit = { //TODO 0.準備環境 val conf: SparkConf=new SparkConf().setAppName("spark").setMaster("local[*]") val sc: SparkContext=new SparkContext(conf) sc.setLogLevel("WARN") //TODO 1.加載數據 val lines:RDD[String]=sc.textFile("data/SogouQ.sample") //TODO 2.處理數據 //封裝數據 val SogouRecordRDD: RDD[SogouRecord]=lines.map(line=>{//map是一個進去一個出去 var arr: Array[String]=line.split("http://s+") SogouRecord( arr(0), arr(1), arr(2), arr(3).toInt, arr(4).toInt, arr(5) ) }) //切割數據 val wordsRDD:RDD[String]=SogouRecordRDD.flatMap(record=>{ //flatmap是一個進去多個出去會被壓扁 //360安全衛士==》[360,安全衛士] val wordsStr:String =record.queryWords.replaceAll("http://[|//]","")//360安全衛士 import scala.collection.JavaConverters._//將Java集合轉為Scala集合 HanLP.segment(wordsStr).asScala.map(_.word)//ArrayBuffer(360,安全衛士) }) //TODO 3.統計指標 //1.熱門搜索詞 val result1: Array[(String,Int)]=wordsRDD .filter(word=> !word.equals(".")&& !word.equals("+")) .map((_,1)) .reduceByKey(_+_) .sortBy(_._2,false) .take(10) // 2.用戶熱門搜索詞(帶上用戶id) val userIdAndWordRDD:RDD[(String,String)]=SogouRecordRDD.flatMap(record=>{ //flatmap是一個進去多個出去會被壓扁 //360安全衛士==》[360,安全衛士] val wordsStr:String =record.queryWords.replaceAll("http://[|//]","")//360安全衛士 import scala.collection.JavaConverters._//將Java集合轉為Scala集合 val words: mutable.Buffer[String]=HanLP.segment(wordsStr).asScala.map(_.word)//ArrayBuffer(360,安全衛士) val userId: String=record.userId words.map(word=>(userId,word)) }) val result2: Array[((String,String),Int)]=userIdAndWordRDD .filter(word=> !word._2.equals(".")&& !word._2.equals("+")) .map((_,1)) .reduceByKey(_+_) .sortBy(_._2,false) .take(10) // 3.各個時間段搜索熱度 val result3: Array[(String,Int)]=SogouRecordRDD.map(record=>{ val timeStr:String=record.queryTime val hourAndMinunesStr:String =timeStr.substring(0,5) (hourAndMinunesStr,1) }).reduceByKey(_+_) .sortBy(_._2,false) .take(10) //TODO 4.輸出結果 result1.foreach(println) result2.foreach(println) result3.foreach(println) //TODO 5.釋放資源 sc.stop() }//準備一個樣例類用來封裝數據}/**用戶搜索點擊網頁記錄Record *@param queryTime 訪問時間,格式為:HH:mm:ss *@param userId 用戶ID *@param queryWords 查詢詞 *@param resultRank 該URL在返回結果中的排名 *@param clickRank 用戶點擊的順序號 *@param clickUrl 用戶點擊的URL */case class SogouRecord( queryTime:String, userId:String, queryWords:String, resultRank:Int, clickRank:Int, clickUrl:String )
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123676.html
摘要:以及大數據平臺都已經進行了集成并且處于企業就緒狀態。因此,顧客避免浪費時間在安裝配置及監控系統方面。注意防止數據頻繁移動。 本文源地址:http://www.mongoing.com/blog/post/leaf-in-the-wild-stratio-integrates-apache-spark-and-mongodb-to-unlock-new-customer-insights...
摘要:是設計用來表示數據集的一種數據結構。而正因為滿足了這么多特性,所以把叫做,中文叫做彈性分布式數據集。按照這篇論文中文譯文的解釋,窄依賴是指子的每個分區依賴于常數個父分區即與數據規模無關寬依賴指子的每個分區依賴于所有父分區。 原文鏈接 寫在前面 本系列是綜合了自己在學習spark過程中的理解記錄 + 對參考文章中的一些理解 + 個人實踐spark過程中的一些心得而來。寫這樣一個系列僅僅是...
閱讀 3266·2021-11-18 10:02
閱讀 3443·2021-10-11 10:58
閱讀 3375·2021-09-24 09:47
閱讀 1119·2021-09-22 15:21
閱讀 3914·2021-09-10 11:10
閱讀 3276·2021-09-03 10:28
閱讀 1747·2019-08-30 15:45
閱讀 2135·2019-08-30 14:22