IP经纬度热力图分析
(一) 需求分析
在互联网中,我们经常会见到城市热点图这样的报表数据,例如在百度统计中,会统计今年的热门旅游城市、热门报考学校等,并将这样的信息显示在热点图中。
因此,我们需要通过日志信息(运行商或者网站自己生成)和城市ip段信息来判断用户的ip段,统计热点经纬度、热门城市等指标。
接下来我们使用spark来实现上述功能。
(二) 数据分析
●数据
log.format
ip.txt
●日志数据20190121000132.394251.http.format
在ip日志信息中,我们只需要关心ip这一个维度就可以了,其他的不做介绍
●ip地址规则数据ip.txt
(三) 编码实现-RDD
●思路分析
1.创建SparkContext
2.加载ip规则文件
3.获取ip起始范围(2)、结束范围(3)、城市信息(4,5,6,7,8)、经度(13)、维度(14)
4.加载日志文件
5.将日志的ip分割出来
6.将ip转为数字,并使用二分查找去ipRules中查找出相应的城市信息,记为((城市,经度,纬度),1)
7.将((城市,经度,维度),1)进行聚合得出统计结果
sparkcore 方法
package day06
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD
import org.apache.spark.{
SparkConf, SparkContext}
/**
* Author:SZX
* Date:2020/10/23 20:06
* Version:1.0
* Description:
*/
object ipmap2 {
def main(args: Array[String]): Unit = {
//创建Spark程序入口
val conf: SparkConf = new SparkConf().setAppName("demo").setMaster("local[*]")
val sc = new SparkContext(conf)
//设置日志级别
sc.setLogLevel("WARN")
//加载ip.txt文件
val file: RDD[String] = sc.textFile("E:\\test\\ip.txt")
//按照分隔符进行切分
val spliFile: RDD[Array[String]] = file.map(_.split("\\|"))
//提取所需字段
val ipRuler: RDD[(String, String, String, String, String)] = spliFile.map(x => (x(2), x(3), x(4) + x(5) + x(6) + x(7) + x(8), x