Spark scala编程练习题——通过日志统计网站访问量

数据说明
数据:某搜索引擎查询日志
搜索引擎查询日志数据包括搜索引擎部分网页查询需求及用户点击情况的网页查询日志数据集合。
用户ID是根据用户使用浏览器访问搜索引擎时的Cookie信息自动赋值,即同一次使用浏览器输入的不同查询对应同一个用户ID。
注意数据间分割符。
时间 用户ID [查询词] 该URL在返回结果中的排名 用户点击的顺序号 用户点击的URL
00:00:00 2982199073774412 [360安全卫士] 8 3 download.it.com.cn/softweb/software/firewall/antivirus/20067/17938.html

注意:
1.数据间分隔符问题,其中字段3、4之间为空格,其他字段之间为制表符;(可以使用"\s+"对空格、制表符等进行拆分);
2.为了便于分析和数据统一,要求数据分割后长度等于6,过滤不合法数据

需求1:网站(URL)访问量统计,对URL进行过滤,统计日志数据中各个网站URL首页的访问次数,结果写入本地/root/retrievelog/output/url/part-00000,格式见步骤说明。
对URL进行过滤,获取首页网站的访问量,只统计www开头的首页网站;
过滤以www开头的所有URL,对URL进行/切分,获取首页网址,如www.tudou.com;
首页网址搜索频率统计,按首页网址分组聚合,根据频率进行降序排列;
文件保存路径为:/root/retrievelog/output/url/part-00000,结果无需分区;
示例结果:(www.tudou.com,28714) 表示网站URLwww.tudou.com的访问次数为28714。

先导入一下spark的依赖

<dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.0.0</version>
        </dependency>

代码如下:

package com.dd.spark

import java.io.{File, PrintWriter}

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object LogAnalyse01 {

  def main(args: Array[String]): Unit = {
    val sparkConf= new SparkConf().setMaster("local[*]").setAppName("LogAnalyse01")

    val sc : SparkContext = new SparkContext(sparkConf)

    val fileRDD: RDD[String] = sc.textFile("D:\\test1128\\reduced.txt")


    //只获取一下网址内容
    val urlRDD: RDD[String] = fileRDD.map( _.split("\t")(4))


    //按需要过滤一下不是www打头的
    val wwwRDD: RDD[String] = urlRDD.filter(_.startsWith("www"))


    //按需要切割一下/
    val splitRDD: RDD[String] = wwwRDD.map(_.split("/")(0))


    //wordcount操作
    val wordRDD: RDD[(String, Int)] = splitRDD.map((_,1))

    //按照key聚合一下
    val byKeyRDD: RDD[(String, Int)] = wordRDD.reduceByKey(_+_)

    //搞一下排序
    val sortRDD: RDD[(String, Int)] = byKeyRDD.sortBy(_._2,false)


    //将结果写入文件
    val writer = new PrintWriter(new File("D:\\test1128\\result01.txt"))
    val tuples = sortRDD.collect()
    for (elem <- tuples) {
      writer.write("("+elem._1 + "," + elem._2 + ")\n")
    }

    sc.stop()

  }

}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MIDSUMMER_yy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值