• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于文本信息的SparkSQL處理研究

    2020-02-02 06:46:48史媛
    電子技術與軟件工程 2020年15期
    關鍵詞:借書數據處理數量

    史媛

    (山西機電職業(yè)技術學院 山西省長治市 046011)

    1 前言

    近年來,大數據技術已經深入到生活的方方面面,大數據處理技術更是以前所未有的速度在向前發(fā)展。在大數據處理技術中,Spark 技術取得的成就引人注目。Spark 是快速通用的大規(guī)模數據處理引擎,它是基于內存的、分布式的大數據處理框架,和Hadoop中的MapReduce 類似,都是對數據進行處理,處于同一個層面,但是Hadoop 允許部署在一些低端的硬件上,這就造成了Hadoop在運算過程中的速度受限于最低速的硬件,而Spark 是面向內存的大數據處理引擎,基于內存的運算速度遠遠大于基于磁盤的運算速度,相當于“高富帥”,因而Spark 越來越被重量級的數據企業(yè)所青睞。

    在Spark 中,主 要 有SparkSQL、SparkStreaming、GraphX、MLlib 四個組件,其中,SparkSQL 是Spark 用來操作結構化數據的組件,通過SparkSQL,用戶可以使用SQL 或者Apache Hive的HQL 語言來查詢數據,它支持多種數據源類型,如Hive 表、Parquet 以及JSON 等。SparkSQL 為Spark 提供了SQL 借口,還允許開發(fā)者將SQL 語句融入到Spark 應用程序中。本文就SparkSQL在圖書信息上的應用做簡單介紹。

    2 問題描述

    圖書館中的圖書藏量十分龐大,要從中分析圖書的相關信息,比如:統(tǒng)計各種分類中圖書數量、統(tǒng)計圖書借閱量、統(tǒng)計讀者借閱情況等。圖書館的管理人員就能夠根據這些分析出來的信息得出相應的結果,從而做出對應的決策,例如:下架借閱量低的圖書、增加受歡迎圖書類型的購書量、舉辦圖書推薦活動吸引讀者等,以此來增加圖書館的人流量和借閱量。圖書館中圖書數據、借閱數據十分龐大,采用以往的手段來統(tǒng)計,費時費力,可以將數據用Spark技術處理,運用SparkSQL 組件計算相關信息。

    3 解決步驟

    3.1 將圖書相關信息文件轉換為DataFrame數據集

    圖書信息中有圖書表——存儲圖書相關數據、讀者表——存儲讀者相關數據、借閱表——存儲借閱相關數據,原始數據文件都不是SparkSQL 能處理的格式,需要轉換為SparkSQL 能處理的格式——DataFrame 數據集。

    DataFrame 是以RDD 為基礎的分布式數據集,和傳統(tǒng)數據庫的二維表格類似,它是以列方式存儲數據的,每一列都帶有名稱和類型,這和以往以行方式存儲數據的數據表不同,它對數據的內部結構有非常強的描述能力。SparkSQL 處理的對象就是DataFrame。

    選擇通過反射機制創(chuàng)建DataFrame。

    圖1:DataFrame 創(chuàng)建

    圖2:各類圖書借閱量排序結果

    圖3:各類職業(yè)讀者數量

    圖4:各類圖書價格總和

    首先,在集群上將文件上傳到HDFS 上,以圖書文件為例。

    hdfs dfs -put Book.txt/Book_Spark/data

    第二步,進入Spark 環(huán)境,定義對應的樣本類。

    case class Book(Id:String,Name:String,Price:Int,Publisher:String,A uthor:String,Classification:String)

    第三步,加載文件,轉換為RDD

    scala>val rdd=sc.textFile(“/Book_Spark/data/Book.txt”).map(_.split(“,”)).map(p=> Book(p(0),p(1),p(2).trim.toInt,p(3),p(4),p(5)))

    第四步,使用toDF()方法轉換為DataFrame

    scala>val book=rdd.toDF()

    第五步,將DataFrame 注冊為臨時表

    scala>book.registerTempTable(“temp_book”)

    scala>book.show

    運行結果如圖1。

    從圖1可以看到圖書文件中的信息,這表明已經將圖書文件成功轉換為DataFrame。讀者文件和借閱文件轉換DataFrame 采用上述同樣的方法進行轉換,轉換后的DataFrame 名稱分別為reader 和borrow。

    3.2 數據處理

    上面步驟完成后就可以使用SparkSQL 進行數據處理了。為了分析讀者喜好哪一類圖書,可以看看哪一類圖書的借閱量最大。

    3.2.1 統(tǒng)計各類圖書借閱量,降序排序

    scala>sqlContext.sql(“selecth.Classification,count(h.Id) as count from temp_book h join temp_borrow k on h.Id=k.Bid group by h.Classification order by count”).show

    根據圖2統(tǒng)計結果,圖書館在購置圖書的時候可以偏向借閱量比較大的圖書類型。對那些節(jié)約量比較低的圖書,可以適當調整書架位置或者是下架。

    3.2.2 查看借書讀者信息

    scala>sqlContext.sql(“select r.* from temp_reader r join temp_borrow b on r.Id=b.Rid”).show

    從查看借書讀者的結果可以分析,經常借閱圖書的讀者年齡、職業(yè)等。

    3.2.3 統(tǒng)計男女讀者數量

    scala>sqlContext.sql(“select sex,count(Id) from temp_reader group by sex”).show

    3.2.4 統(tǒng)計借閱圖書讀者年齡段數量

    scala>sqlContext.sql(“select count(r.Id) as Less_then_10 from temp_reader r join temp_borrow b on r.Id=b.Rid where r.Age <10”).show

    年齡可以更換,各個年齡段的數量都可以統(tǒng)計。

    3.2.5 統(tǒng)計各類職業(yè)讀者數量

    scala>sqlContext.sql(“select Occupation,count(Id) as Number from temp_reader group by Occupation”).show

    從注冊登記讀者性別數量中可以分析出,經常或者有意愿來圖書館看書、借書的人是男讀者多還是女讀者多;從年齡統(tǒng)計上可以看出借書的是哪個年齡段的人比較多;從注冊登記讀者職業(yè)數量上來看,哪類職業(yè)的讀者更有意愿來圖書館看書或借書,綜合借書讀者信息的統(tǒng)計結果進行分析,這樣,圖書館在舉辦相關活動的時候主題可以有所偏向,比如,可以舉辦相應的圖書展覽會,作者讀者見面會、主題活動等吸引更多沒有注冊登記讀者來參加活動,更加符合讀者年齡、類型和讀者看書意愿,在推薦圖書的時候目標性更強,活動舉辦的效果更好。

    另外,圖書館還可以統(tǒng)計圖書的一些信息。

    3.2.6 對圖書價格進行降序排序,看看圖書最高的價格和最低的價格

    scala>book.orderby(book(“price”)).show(5)

    或者

    scala>book.sort($“price”.desc).show(5)

    3.2.7 統(tǒng)計各類圖書數量

    scala>sqlContext.sql(“select count(Id),Classification from temp_book groupby Classification ”).show

    3.2.8 求各類圖書價格總和信息

    scala>sqlContext.sql(“select Classification,sum(price) from temp_book group by Classification”).show

    根據圖4結果可以幫助圖書館對圖書進行調整和編制購置預案等。

    4 總結

    可以看出,SparkSQL 在處理結構化數據上有著良好的處理能力,Spark 技術的Scala 語言比較精煉,能夠很高效、準確地進行數據處理,SparkSQL 不僅僅可以使用Scala 語言實現,還可以融入到Python、Java 語言中,而且SparkSQL 還可以結合Hive 等大數據工具進行更復雜的數據處理和分析,即在大數據生態(tài)圈里進行數據的采集、處理和分析。本文中的案例只是單獨運用了SparkSQL組件進行數據處理,原始數據來源于文本文件,沒有存儲到數據庫中,這有缺陷,比如,年齡的更改和計算,文本文件去更改就比較麻煩,但是如果放入到數據庫中就可以使用SQL 語句很方便地更改或計算年齡。學生要掌握SparkSQL,前提是對數據庫和SQL 語言要十分熟悉,并且能夠靈活運用。在以后的教學中,可多多增加Python 和Java 語言融合Scala 的案例和結合Hive 等大數據工具分析處理數據的案例,接近工程實際,靈活運用SparkSQL。

    猜你喜歡
    借書數據處理數量
    圖圖借書
    認知診斷缺失數據處理方法的比較:零替換、多重插補與極大似然估計法*
    心理學報(2022年4期)2022-04-12 07:38:02
    ILWT-EEMD數據處理的ELM滾動軸承故障診斷
    水泵技術(2021年3期)2021-08-14 02:09:20
    借書去
    統(tǒng)一數量再比較
    借書
    快樂語文(2018年12期)2018-06-15 09:11:10
    圖圖借書
    頭發(fā)的數量
    基于希爾伯特- 黃變換的去噪法在外測數據處理中的應用
    我國博物館數量達4510家
    广宁县| 株洲县| 精河县| 乡城县| 桃江县| 广丰县| 广西| 内江市| 永州市| 浙江省| 丹巴县| 洪泽县| 东乡族自治县| 东明县| 馆陶县| 阿巴嘎旗| 行唐县| 璧山县| 松江区| 桑日县| 武夷山市| 中江县| 清水河县| 德州市| 虎林市| 湖北省| 团风县| 道孚县| 旌德县| 贵港市| 桦南县| 诸暨市| 鄂伦春自治旗| 金川县| 长葛市| 卢湾区| 米脂县| 平江县| 拉萨市| 光山县| 怀宁县|