作业题:京东店铺访问数

该代码示例展示了如何利用Apache Spark处理日志数据,计算每个店铺被不同用户访问的次数,并进一步获取每个店铺访问次数前三的用户信息。首先,从HDFS读取`jd_visit.log`文件,转换为DataFrame,然后通过SQL查询进行分组计数、排名,最终筛选出每个店铺的前三名用户。
摘要由CSDN通过智能技术生成

题目:

在这里插入图片描述

(1)

var sql =
      """
        |select shop_name,count(distinct user_id)
        |from t_shop
        |group by shop_name
        |""".stripMargin 

(2)

  /*var sql =
      """
        |select shop_name,user_id,count(*)
        |from t_shop
        |group by shop_name,user_id
        |//as ct
        |""".stripMargin*/
    //2).查询每个店铺被用户访问的次数排名  表t2
/*    var sql =
      """
        |select shop_name,user_id,
        |rank() over(partition by shop_name order by ct) rk
        |from t1
        |as t2
        |""".stripMargin*/
    //3).取得每个店铺的前三名
  /*  var sql =
      """
        |select shop_name,user_id,ct
        |from t2
        |where rk<=3
        |""".stripMargin
*/
    //4).整合
    var sql =
      """
        |select shop_name,user_id,ct
        |from(
        |     select shop_name,user_id,ct,rank() over(partition by shop_name order by ct) rk
        |     from
        |     (
        |       select shop_name,user_id,count(*) ct
        |       from t_shop
        |       group by shop_name,user_id
        |     )t1
        | )t2
        |where rk<=3
        |""".stripMargin
    val result: DataFrame = spark.sql(sql)
    result.show()

完整作业代码

object ShopApplication {
  def main(args: Array[String]): Unit = {
    /*1.创建*/
    val spark: SparkSession = SparkSession
      .builder()
      .config("spark.app.name", "Shop")
      .config("spark.master", "local[*]")
      .getOrCreate()
    /*2.导入数据*/
    val rdd: RDD[String] = spark.sparkContext.textFile("hdfs://hadoop10:9000/jd_visit.log")
    /*读取数据,获取df对象*/
    import spark.implicits._
    val df1: DataFrame = rdd.map(_.split("\\s+"))
      .map(array => (array(0), array(1))).toDF("user_id", "shop_name")
    df1.createTempView("t_shop")
    //需求1:每个店铺的UV(访客数)
  /*  var sql =
      """
        |select shop_name,count(distinct user_id)
        |from t_shop
        |group by shop_name
        |""".stripMargin*/
    //需求2:每个店铺访问次数top3的访客信息。输出店铺名称、访客id、访问次数
    //1).查询每个店铺被访问的次数 表ct
    /*var sql =
      """
        |select shop_name,user_id,count(*)
        |from t_shop
        |group by shop_name,user_id
        |//as ct
        |""".stripMargin*/
    //2).查询每个店铺被用户访问的次数排名  表t2
/*    var sql =
      """
        |select shop_name,user_id,
        |rank() over(partition by shop_name order by ct) rk
        |from t1
        |as t2
        |""".stripMargin*/
    //3).取得每个店铺的前三名
  /*  var sql =
      """
        |select shop_name,user_id,ct
        |from t2
        |where rk<=3
        |""".stripMargin
*/
    //4).整合
    var sql =
      """
        |select shop_name,user_id,ct
        |from(
        |     select shop_name,user_id,ct,rank() over(partition by shop_name order by ct) rk
        |     from
        |     (
        |       select shop_name,user_id,count(*) ct
        |       from t_shop
        |       group by shop_name,user_id
        |     )t1
        | )t2
        |where rk<=3
        |""".stripMargin
    val result: DataFrame = spark.sql(sql)
    result.show()

    //释放资源
    spark.stop()
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值