Spark RDD案例:統計網站每月訪問量

這個項目利用Spark技術,通過統計網站訪問記錄中的日期信息,實現了對每月訪問量的統計和排序。通過分析數據,我們可以了解到不同月份的網站訪問情況,為進一步優化網站內容和推廣策略提供數據支持。
在這里插入圖片描述

在這里插入圖片描述

使用Spark統計網站每月訪問量

1. 準備數據文件
  1. 數據文件:準備包含網站訪問記錄的CSV文件 websiteData.csv,內容格式如下:

    3798675,1628,89957,81E8E153E24DF28E1D38F01FF4A4AA26,2020-5-13 9:06,http://www.tipdm.org/bdrace/tzjingsai/20200113/1628.html?cName=ral_105
    
  2. 上傳數據到云主機

    • 將數據文件上傳到master節點的/datafiles目錄。
  3. 上傳文件到HDFS

    • 創建HDFS目錄
      hdfs dfs -mkdir -p /websitetraffic/input
      
    • 上傳文件到HDFS
      hdfs dfs -put websiteData.csv /websitetraffic/input
      
2. 使用Spark Shell完成任務
  1. 讀取文本文件生成RDD

    var lines = sc.textFile("hdfs://master:9000/websitetraffic/input")
    
  2. 獲取日期時間數據

    val datetime = lines.map(line => line.split(",")(4))
    datetime.collect
    
  3. 獲取日期數據

    val date = datetime.map(datetime => datetime.split(" ")(0))
    date.collect
    
  4. 獲取年月日字段

    val fields = date.map(date => date.split("-"))
    fields.collect
    
  5. 獲取(年月, 1)鍵值對

    val wtmap = fields.map(fields => (fields(0) + "-" + fields(1), 1))
    wtmap.collect
    
  6. 按鍵歸約獲取每月訪問量

    val wt = wtmap.reduceByKey(_ + _)
    wt.collect
    
  7. 按訪問量降序排列

    val wt_desc = wt.sortBy(_._2, false)
    wt_desc.collect
    wt_desc.collect.foreach(println)
    
3. 使用Spark項目完成任務
  1. 創建Maven項目

    • 創建Jakarta EE項目,設置項目名稱為SparkRDDWebsiteTraffic,選擇Java EE 8,不添加依賴。
    • 修改源程序目錄為scala
  2. 添加項目相關依賴

    • pom.xml文件中添加Spark依賴,并告知源程序目錄已更名為scala
      <dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.1.3</version></dependency>
      </dependencies>
      <build><sourceDirectory>src/main/scala</sourceDirectory>
      </build>
      
  3. 添加Scala SDK

    • 在項目結構中選擇【Global Libraries】,添加Scala SDK
  4. 創建日志屬性文件

    • resources目錄下創建log4j.properties文件
      log4j.rootLogger=ERROR, stdout, logfile
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
      log4j.appender.logfile=org.apache.log4j.FileAppender
      log4j.appender.logfile.File=target/traffic.log
      log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
      log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
      
  5. 創建HDFS配置文件

    • resources目錄里創建hdfs-site.xml文件
      <configuration><property><name>dfs.client.use.datanode.hostname</name><value>true</value></property>
      </configuration>
      
  6. 創建網站訪問量對象

    • 創建包net.huawei.rdd
    • 在包內創建對象WebsiteTraffic
      package net.huawei.rddimport org.apache.spark.{SparkConf, SparkContext}object WebsiteTraffic {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("SparkRDDWebsiteTraffic").setMaster("local[*]")val sc = new SparkContext(conf)val inputPath = "hdfs://master:9000/websitetraffic/input"val outputPath = "hdfs://master:9000/websitetraffic/output"val wt = sc.textFile(inputPath).map(line => line.split(",")(4)).map(datetime => datetime.split(" ")(0)).map(date => date.split("-")).map(fields => (fields(0) + "-" + fields(1), 1)).reduceByKey(_ + _).sortBy(_._2, false)wt.collect.foreach(println)wt.saveAsTextFile(outputPath)sc.stop()}
      }
      
  7. 運行程序,查看結果

    • 在控制臺查看運行結果
    • 查看HDFS上的結果文件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12853.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12853.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12853.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache2.4和PHP8的量子糾纏

Apache不建議你用&#xff0c;PHP建議使用

一種基于電場連續性的高壓MOSFET緊湊模型,用于精確表征電容特性

來源&#xff1a;A Compact Model of High-Voltage MOSFET Based on Electric Field Continuity for Accurate Characterization of Capacitance&#xff08;TED 24年&#xff09; 摘要 本文提出了一種新的高壓MOSFET&#xff08;HV MOS&#xff09;緊湊模型&#xff0c;以消…

P5732 楊輝三角

題目描述 給出 &#x1d45b;(&#x1d45b;≤20)n(n≤20)&#xff0c;輸出楊輝三角的前 &#x1d45b;n 行。 如果你不知道什么是楊輝三角&#xff0c;可以觀察樣例找找規律。 輸入格式 無 輸出格式 無 輸入輸出樣例 輸入 #1復制 6 輸出 #1復制 1 1 1 1 2 1 1 3 3 …

408學習筆記-數據結構-2-線性表

線性表 1、邏輯結構 1、數據結構只有一種邏輯結構&#xff0c;而可以有兩種存儲結構&#xff0c;有多種抽象運算。 2、線性表是一種邏輯結構&#xff0c;屬于總線性結構——線性結構的一種&#xff0c;同屬于線性結構的邏輯結構還有&#xff1a;棧、隊列和數組。 3、線性表定…

【經典文獻】水下光學和聲學成像:融合的時代?最新技術概述

文獻名稱&#xff1a;《Underwater Optical and Acoustic Imaging: A Time for Fusion? A Brief Overview of the State-of-the-Art》作者列表&#xff1a;Fausto Ferreira, Diogo Machado, Gabriele Ferri, Samantha Dugelay and John Potter作者單位&#xff1a;北約科學技術…

【hana】hana1.0多容器常用命令

基礎命令 數據庫 連接數據庫 hdbsql -u system -p {passwd} -i 02 -d {dbname}查詢所有數據庫 SELECT DATABASE_NAME, ACTIVE_STATUS FROM M_DATABASES;停止數據庫&#xff0c;會修改數據庫狀態為No ALTER SYSTEM STOP DATABASE testdb; 啟動數據庫&#xff0c;會修改數據…

多線程的代碼案例

目錄 單例模式 餓漢模式 懶漢模式 阻塞隊列 生產者消費者模型意義: 阻塞隊列使用方法 實現阻塞隊列 阻塞隊列實現生產者消費者模型 定時器 實現簡單的定時器 工廠模式 線程池 為啥呢? 從池子里面取 比 創建線程 效率更高 線程池的創建 怎么填坑 ThreadPoolExec…

多年后,再探算法和數據結構

多年來&#xff0c;通過深入學習和實踐各種編程語言&#xff0c;我對數據結構和算法在程序設計中的中心地位有了新的認識。本次從匯編語言到高級編程語言的探討&#xff0c;展示了無論技術如何進步&#xff0c;構成程序的核心—算法和數據結構—始終保持其基礎和不變的角色。 …

圖解堆排序【一眼看穿邏輯思路】

P. S.&#xff1a;以下代碼均在VS2019環境下測試&#xff0c;不代表所有編譯器均可通過。 P. S.&#xff1a;測試代碼均未展示頭文件stdio.h的聲明&#xff0c;使用時請自行添加。 目錄 1、堆的概念2、實現堆排序前的準備工作3、堆排序的思路3.1 第一步3.2 第二步 4、結語 1、…

音視頻捕捉技術:LCC382 SDI采集卡深度解析

在日新月異的多媒體時代&#xff0c;高質量的音視頻采集已成為眾多領域不可或缺的一環。為此&#xff0c;靈卡科技精心打造了LCC382 —— 一款集高效性、靈活性與前沿技術于一身的SDI輸入與環出、HDMI輸出音視頻采集卡&#xff0c;旨在滿足從專業直播、視頻會議到醫療影像、安防…

網頁版Figma漢化

最近學習Figma&#xff0c;簡單介紹一下網頁版Figma的漢化方法 1.打開網址&#xff1a;Figma軟件漢化-Figma中文版下載-Figma中文社區 2.下載漢化插件離線包 解壓漢化包 3.點開谷歌的管理擴展程序 4.點擊加載已解壓的擴展程序&#xff0c;選擇剛剛解壓的包 這樣就安裝好了漢化…

QT狀態機2-含終止狀態的嵌套狀態機

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

前饋神經網絡FNN、多層感知機MLP和反向傳播推導

目錄 一、前饋神經網絡FNN 激活函數的使用 二、多層感知機MLP MLP的典型結構 多層感知機MLP的特點 和前饋神經網絡FNN的區別 三、傳播推導 1、前向傳播(Forward propagation) &#xff08;1&#xff09;輸入層到隱藏層 &#xff08;2&#xff09;隱藏層到輸出層 2、…

Java面試八股之WeakHashMap的工作原理

簡述WeakHashMap的工作原理 弱鍵&#xff08;Weak Keys&#xff09;&#xff1a; WeakHashMap 的鍵&#xff08;keys&#xff09;是通過 WeakReference 弱引用進行封裝的。弱引用是一種特殊的引用類型&#xff0c;它不會阻止所引用的對象被垃圾收集器回收。這意味著&#xff…

冥想訓練具體方法有哪些|流靜冥想

冥想是一種身體的放松和敏銳的警覺性相結合的狀態。 每日練習的好處遠不止你花在集中注意力的那幾分鐘。桑托雷利是建在烏斯特的馬薩諸塞大學醫學院的減壓診所的所長&#xff0c;她也是《自愈》的作者&#xff0c;她說&#xff1a;"冥想是一種工具&#xff0c;通過練習&a…

ubuntu無法遠程連接,ssh不可用,ssh遠程連接被拒絕的解決方法。啟動sshd遠程連接

1、用以下命令檢查ssh狀態 systemctl status sshd2、如果查不到sshd狀態&#xff0c;或提示沒有ssh&#xff0c;就安裝ssh服務器和客戶機 $ sudo apt install openssh-server # 安裝ssh服務器 $ sudo apt install openssh-client # 安裝ssh客戶機3、如果不能安裝openssh-…

構建安全的GenAI/LLMs核心技術解密之大模型對抗攻擊(一)

LlaMA 3 系列博客 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四) 基于 LlaMA…

云手機的優缺點分析

云手機&#xff0c;作為云計算領域的創新&#xff0c;致力于提供更為靈活的移動設備體驗&#xff0c;特別適用于那些希望在不同設備之間無縫切換的用戶。雖然云手機帶來了一系列優勢&#xff0c;但也伴隨著一些挑戰&#xff0c;比如網絡延遲可能會影響用戶體驗&#xff0c;特別…

網絡安全|隱藏IP地址的5種不同方法

隱藏計算機的IP地址在互聯網在線活動種可以保護個人隱私&#xff0c;這是在線活動的一種常見做法&#xff0c;包括隱私問題、安全性和訪問限制內容等場景。那么如何做到呢?有很5種方法分享。每種方法都有自己的優點和缺點。 1. 虛擬網絡 當您連接到虛擬服務器時&#xff0c;您…

openGauss學習筆記-284 openGauss AI特性-AI4DB數據庫自治運維-DBMind模式說明-component子命令

文章目錄 openGauss學習筆記-284 openGauss AI特性-AI4DB數據庫自治運維-DBMind模式說明-component子命令284.1 命令參考openGauss學習筆記-284 openGauss AI特性-AI4DB數據庫自治運維-DBMind模式說明-component子命令 該子命令可以用于啟動DBMind的組件,包括可用于監控指標的…