这个项目利用Spark技术,通过统计网站访问记录中的日期信息,实现了对每月访问量的统计和排序。通过分析数据,我们可以了解到不同月份的网站访问情况,为进一步优化网站内容和推广策略提供数据支持。

使用Spark统计网站每月访问量
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 - 上传数据到云主机- 将数据文件上传到master节点的
/datafiles目录。 - 上传文件到HDFS- 创建HDFS目录
hdfs dfs -mkdir-p /websitetraffic/input- 上传文件到HDFShdfs dfs -put websiteData.csv /websitetraffic/input
2. 使用Spark Shell完成任务
- 读取文本文件生成RDD
var lines = sc.textFile("hdfs://master:9000/websitetraffic/input") - 获取日期时间数据
val datetime = lines.map(line => line.split(",")(4))datetime.collect - 获取日期数据
val date = datetime.map(datetime => datetime.split(" ")(0))date.collect - 获取年月日字段
val fields = date.map(date => date.split("-"))fields.collect - 获取(年月, 1)键值对
val wtmap = fields.map(fields =>(fields(0)+"-"+ fields(1),1))wtmap.collect - 按键归约获取每月访问量
val wt = wtmap.reduceByKey(_ + _)wt.collect - 按访问量降序排列
val wt_desc = wt.sortBy(_._2,false)wt_desc.collectwt_desc.collect.foreach(println)
3. 使用Spark项目完成任务
- 创建Maven项目- 创建Jakarta EE项目,设置项目名称为
SparkRDDWebsiteTraffic,选择Java EE 8,不添加依赖。- 修改源程序目录为scala。 - 添加项目相关依赖- 在
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> - 添加Scala SDK- 在项目结构中选择【Global Libraries】,添加Scala SDK
- 创建日志属性文件- 在
resources目录下创建log4j.properties文件log4j.rootLogger=ERROR, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.FileAppenderlog4j.appender.logfile.File=target/traffic.loglog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n - 创建HDFS配置文件- 在
resources目录里创建hdfs-site.xml文件<configuration><property><name>dfs.client.use.datanode.hostname</name><value>true</value></property></configuration> - 创建网站访问量对象- 创建包
net.huawei.rdd。- 在包内创建对象WebsiteTraffic``````packagenet.huawei.rddimportorg.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()}} - 运行程序,查看结果- 在控制台查看运行结果- 查看HDFS上的结果文件
本文转载自: https://blog.csdn.net/howard2005/article/details/138918832
版权归原作者 howard2005 所有, 如有侵权,请联系我们删除。
版权归原作者 howard2005 所有, 如有侵权,请联系我们删除。