使用Spark SQL对网站后台日志数据进行分析

样例列:

case class Log(userIp:String,UserId:Int,url:String,access:String)

val conf = new SparkConf().setAppName(this.getClass.getName).setMaster("local[*]")
    val spark = SparkSession.builder().config(conf).getOrCreate()
    val sc = spark.sparkContext
    sc.setCheckpointDir("checkpoint")
    val lineRDD = sc.textFile("C:\\SchoolJavaCode\\06月-java\\spark_12_zy\\visitData.txt")
      .map(_.split(","))
    val logRDD = lineRDD.map(x => Log(x(0), x(1).toInt, x(2), x(3)))
    import spark.implicits._
    val logDF: DataFrame = logRDD.toDF()
    //    logDF.show()
    logDF.registerTempTable("log")
    logDF.createOrReplaceTempView("log")
    //(5)    使用sparkSQL计算出每个url的用户访问量(uv),排序后打印控制台
    //    println("使用sparkSQL计算出每个url的用户访问量(uv),排序后打印控制台")
    //    spark.sql("select distinct url, count( distinct userId) as count from log group by url order by count asc;").show(30,false)
    //    //(6)    使用sparkSQL计算出每个url每天的用户访问量(uv),并打印控制台
    //    println("使用sparkSQL计算出每个url每天的用户访问量(uv),并打印控制台")
    //    spark.sql("select  distinct left(access,10) as date,count( distinct userId), url from log group by url,date").show(30,false)
    //(7)    使用sparkSQL计算出每个url的浏览量(pv),倒序排序并打印控制台
    //    println("使用sparkSQL计算出每个url的浏览量(pv),倒序排序并打印控制台")
    //    spark.sql("select url,count(1) as count from log group by url order by count desc;").show(30,false)
    //(8)    取出浏览量(pv)前3的url及其浏览量,打印控制台
    //    println("取出浏览量(pv)前3的url及其浏览量,打印控制台")
    //    spark.sql("select url,count(1) as count from log group by url order by count desc limit 3;").show(30,false)
    //(9)    使用sparkSQL计算出每个url每天的浏览量(pv),并打印控制台
//    println("使用sparkSQL计算出每个url每天的浏览量(pv),并打印控制台")
//    spark.sql("select left(access,10) as date,count(userId), url from log group by date,url;").show(30, false)
    //(10)    使用sparkSQL统计哪天的浏览量(pv)最大,并打印控制台
    println("使用sparkSQL统计哪天的浏览量(pv)最大,并打印控制台")
    spark.sql("select left(access,10) as date,count(1) as count  from log group by date order by count desc limit 1;").show(30,false)
    //(11)    使用sparkSQL统计用户id为9的用户访问过几个网页(去重),打印控制台
    println("使用sparkSQL统计用户id为9的用户访问过几个网页(去重),打印控制台")
    spark.sql("select distinct url from log where userId='9' group by url;").show(30,false)

12:

spark.sql("select url,count(1) as count,concat_ws(',',collect_set(userId)) from log group by url order by count desc  limit 1;").show(30,false)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
该资源真实可靠,代码都经测试过,能跑通。 快速:Apache Spark以内存计算为核心。 通用 :一站式解决各个问题,ADHOC SQL查询,流计算,数据挖掘,图计算完整的生态圈。只要掌握Spark,就能够为大多数的企业的大数据应用场景提供明显的加速。存储层:HDFS作为底层存储,Hive作为数据仓库 (Hive Metastore:Hive管理数据的schema) 离线数据处理:SparkSQL (做数据查询引擎<===> 数据ETL) 实时数据处理:Kafka + Spark Streaming 数据应用层:MLlib 产生一个模型 als算法 数据展示和对接:Zeppelin 选用考量: HDFS不管是在存储的性能,稳定性 吞吐量 都是在主流文件系统中很占有优势的 如果感觉HDFS存储还是比较慢,可以采用SSD硬盘等方案。存储模块:搭建和配置HDFS分布式存储系统,并Hbase和MySQL作为备用方案。 ETL模块:加载原始数据,清洗,加工,为模型训练模块 和 推荐模块 准备所需的各种数据。 模型训练模块:负责产生模型,以及寻找最佳的模型。 推荐模块:包含离线推荐和实时推荐,离线推荐负责把推荐结果存储到存储系统中实时推荐负责产生实时的消息队列,并且消费实时消息产生推荐结果,最后存储在存储模块中。 数据展示模块:负责展示项目中所用的数据数据流向:数据仓库怎么理解?两种东西,其一是IBM微软数据产品为代表的,其二是Hadoop+Hive+Apache Hive数据仓库软件有助于使用SQL读取,写入和管理驻留在分布式存储中的大型数据集。 可以将结构投影到已经存储的数据上。 提供了命令行工具和JDBC驱动程序以将用户连接到Hive。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值