spark:地区广告点击量排行统计(小案例)

目录

数据准备

需求描述&流程

功能实现


介绍:

广告点击量的好处:

(1)获得高点击率后就可以收取一部分广告收入,当然你的内容粘性越大,广告收入越高;

(2)商业网站更重要的是能够获得信息资产;

(3)获取无形资产:网站知名度,客户资料,客户数据。

注:可以获得客户资料和数据,分析客户的需求,进行定制性服务,让客户更满意;

通过分析,平台可以增加内容与服务,更改结构和工作流程。

数据准备

数据格式:

2022-5-3-22:19:30 浙江 城市6 大笨蛋 广告1
时间、省份、城市、用户、广告      中间字段使用空格分隔。

模拟数据生成

代码如下:

import java.io.{File, PrintWriter}

object DataGet {
  def main(args: Array[String]): Unit = {
    Data(6000)
  }
  def Data(n:Int):Unit ={
    var sb:StringBuilder = new StringBuilder
    for (i <- 1 to n){
      sb.append(time + "-" + timeStamp())
      sb.append(" ")
      sb.append(province())
      sb.append(" ")
      sb.append(city())
      sb.append(" ")
      sb.append(user())
      sb.append(" ")
      sb.append(ADV())
      if (i <= n - 1) {
        sb.append("\n")
      }
    }
    writeToFile(sb.toString())
  }


  def province(): String = {
    val name = Array(
      "北京","上海","贵州","河南","湖北","河北","云南","四川","浙江","江苏"
    )
    val s = (Math.random() * (9) + 0).toInt
    name(s)
  }

  def city(): String = {
    val cityname = Array(
      "城市1","城市2","城市3","城市4","城市5","城市6","城市7"
    )
    val s = (Math.random() * (6) + 0).toInt
    cityname(s)
  }

  def ADV(): String = {
    val ADVname = Array(
      "广告1","广告2","广告3","广告4","广告5","广告6","广告7","广告8"
    )
    val s = (Math.random() * (7) + 0).toInt
    ADVname(s)
  }

  def user(): String = {
    val name = Array(
      "张三","李四","王二","麻子","大笨蛋","小调皮","小乖乖","小机灵"
    )
    val s = (Math.random() * (8) + 0).toInt
    name(s)
  }

  def time(): String = {
    var year: Int = (2022).toInt
    var month: Int = (Math.random() * (12 - 1 + 1) + 1).toInt
    var day: Int = (Math.random() * (31 - 1 + 1) + 1).toInt
    year + "-" + month + "-" + day
  }
  def timeStamp(): String = {
    var hour = (Math.random() * (24 - 1 + 1) + 1).toInt
    var m = (Math.random() * (60 - 1 + 1) + 1).toInt
    var second = (Math.random() * (60 - 1 + 1) + 1).toInt
    hour + ":" + m + ":" + second
  }

  def writeToFile(str: String): Unit = {
    val printWriter = new PrintWriter(new File("E:\\AllProject\\sparklearn\\datas\\testlog.log"))
    printWriter.write(str)
    printWriter.flush()
    printWriter.close()
  }
}

需求描述&流程

统计每个省份每个广告被点击数排行的Top5。

如下图,作者懒,不想做文字解释。

功能实现

代码如下:

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

object case1 {
  def main(args: Array[String]): Unit = {

    //TODO 创建环境
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator")
    val sc = new SparkContext(sparkConf)
    //TODO 案例分析   统计出每个省份每个广告被点击数量排行的Top5
    //1.获取原始数据:时间、省份、城市、用户、广告
    val rdd = sc.textFile("datas/testlog.log")
    //2.提取需要的数据,进行格式转换
    val mapRDD = rdd.map(
      line => {
        val datas = line.split(" ")
        ((datas(1), datas(4)), 1)
      }
    )
    //3.分组聚合
    val reduceRDD = mapRDD.reduceByKey(_ + _)
    //4.结果的格式转换
    val newRDD = reduceRDD.map {
      case (
        (province, adv), sum) => {
        (province, (adv, sum))
      }
    }
    //5.用省份分组
    val groupRDD = newRDD.groupByKey()
    //6.排序
    val resultRDD = groupRDD.mapValues(
      iter => {
        iter.toList.sortBy(_._2)(Ordering.Int.reverse).take(5)
      }
    )
    //7.打印
    resultRDD.collect().foreach(println)

    //TODO 关闭环境
    sc.stop()

  }

}

结果如下:

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Geomesa可以很方便地集成HBase和Spark,实现对HBase的读写操作。具体步骤如下: 1. 首先需要在HBase中创建表,可以使用HBase shell或者HBase API进行创建。 2. 在Spark中引入Geomesa的依赖,可以使用Maven或者SBT进行引入。 3. 使用Geomesa提供的HBaseDataStoreFactory创建HBaseDataStore对象,连接到HBase中的表。 4. 使用Spark的API读取HBase中的数据,可以使用RDD或者DataFrame进行读取。 5. 使用Geomesa提供的HBaseFeatureWriter将数据写入到HBase中。 需要注意的是,在使用Geomesa进行读写HBase时,需要使用Geomesa提供的SimpleFeature类型进行操作。同时,需要在HBase中创建相应的列族和列,以存储SimpleFeature对象的属性值。 ### 回答2: Geomesa是一个基于地理空间数据管理和分析的开源工具。它集成了HBase和Spark,可以实现读写HBase的功能。 在Geomesa中,HBase作为数据存储和查询的主要工具,Spark则用于并行计算和数据处理。通过这种方式,HBase可以实现大规模的数据存储和高效的数据查询,而Spark可以进行并行计算和数据处理,提高数据分析的效率。 在使用Geomesa集成HBase和Spark进行读写HBase的时候,需要进行以下操作: 1. 配置HBase和Spark的环境:为了保证Geomesa正常运作,需要正确配置HBase和Spark的环境。具体的配置方式可以参考Geomesa的官方文档。 2. 读写HBase数据:通过Geomesa的API,可以实现对HBase数据的读写操作。其中,读操作可以通过Scan类进行,而写操作可以通过Put和Delete类进行。 3. 创建和管理数据表:在Geomesa中,可以通过SimpleFeatureType类来定义数据表结构,并且可以使用Spark和HBase的API来实现数据表的创建和管理。 4. 进行空间查询和空间分析:Geomesa支持空间查询和空间分析的功能,可以通过Spark和HBase的API来实现。 以上就是使用Geomesa集成HBase和Spark进行读写HBase的基本操作流程。通过这种方式,可以实现高效、灵活、可扩展的地理空间数据处理和分析,为地理信息系统的应用提供了强有力的支持。 ### 回答3: geomesa是一个基于Apache Spark和Apache Accumulo的开源地理空间数据分析框架。它提供了丰富的地理空间分析功能,并支持海地理数据的处理。随着geomesa社区的发展,它也开始支持其他的后端存储引擎,例如HBase。 geomesa集成HBase和Spark的主要目的是为了在HBase中存储和查询大规模地理数据,并通过Spark进行批计算和实时分析。这种集成方式可以实现高效的数据处理和快速的响应时间,尤其适用于对海地理数据进行地理空间分析和挖掘的场景。 在geomesa中使用HBase的过程主要包括以下几个步骤: 1. 安装HBase和Spark 在使用geomesa之前,需要先安装和配置HBase和Spark环境。HBase是一个开源分布式数据库,可以存储和管理大的结构化数据;Spark一个快速的大数据处理引擎,可以进行批计算和实时分析。 2. 安装geomesa geomesa是一个基于Spark和Accumulo的地理空间分析框架,可以在Spark中快速地进行大规模地理数据的处理和分析。安装geomesa的过程很简单,只需要下载并解压缩geomesa的安装文件即可。 3. 创建HBase数据表 在使用geomesa之前,需要先在HBase中创建相应的数据表。通常情况下,geomesa会为每个表创建两个列族,一个是属性列(attributes),用于存储地理对象的属性信息;另一个是空间列(spatial),用于存储地理对象的空间信息。 4. 使用geomesa创建地理数据集 在HBase中创建好数据表之后,需要使用geomesa创建相应的地理数据集(SimpleFeatureType)。geomesa提供了多种不同类型的SimpleFeatureType,可以根据实际需求选择相应的类型。 5. 将地理数据写入HBase 将地理数据写入HBase的过程很简单,只需要借助geomesa提供的API即可。geomesa支持将地理数据写入HBase和从HBase中读取地理数据。写入数据时,需要指定相应的地理数据集和HBase表,geomesa会自动将数据按照指定的格式写入HBase。 6. 从HBase中读取地理数据 从HBase中读取地理数据的过程同样也很简单,只需要借助geomesa提供的API即可。读取数据时,需要指定相应的地理数据集和HBase表,geomesa会自动从HBase中读取数据,并将数据以相应的格式返回。 以上就是geomesa集成HBase和Spark读写HBase的主要步骤,通过这种方式可以实现高效的海地理数据处理和分析。但在实际应用中,还需要考虑数据安全、性能优化等方面的问题。因此,在使用geomesa时需要根据实际需求进行相应的优化和配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值