• 监察体制改革后 湘西半年72名公职人员主动交代问题 2019-05-12
  • 媒体宣传报道重庆日报 王国平:扮靓重庆两江四岸” 让城市有机更新 2019-04-26
  • 我相信“交警雨中护送高考生”是真,“交警雨中护送高考生”反被该高考生家长投诉是假。 2019-04-16
  • 14名消防员日巡逻28公里 洗冷水澡 2019-04-10
  • 靶壕有了“蓝军”,百发百中的“神枪手”练起来 2019-04-10
  • 不是秀强大了,别人就会来做朋友,这逻辑不对 2019-04-01
  • 候选企业:中国石油呼和浩特石化公司 2019-03-26
  • 航天员沙漠野外生存训练完美收官!为第一天团打call 2019-03-25
  • 请问,建立市场经济后,原计划经济哪里去?改革后,我们还在实行计划经济,为何没有提及? 2019-03-25
  • 构建年轻干部梯次培养链 2019-03-19
  • 孙实的专栏作者中国国家地理网 2019-03-15
  • 湖南师范大学举行研究阐释党的十九大精神国家社科基金重大专项学术研讨会 2019-03-15
  • [雷人]蠢货!土地处于不同的城市和地段,关联的资源不一样,价值也不一样。不然给咱俩同样面积的土地,咱的在北上广深,你的在边远山区,你干么? 2019-03-08
  • 国际社会持续热议上合青岛峰会:上合组织发展进入新阶段 彰显中国领导力 2019-03-08
  • 珍惜野生动物频现甘孜境内 生态环境质量不断提升 2019-03-06
  • 频道栏目
    神奇公式秒杀全国11选5 > 网络 > 云计算 > 正文

    11选5前三神奇公式:Spark案例之根据ip地址计算归属地教程

    2018-10-18 11:18:36           
    收藏   我要投稿

    神奇公式秒杀全国11选5 www.2zfa.com 1.需求

    根据访问日志中的ip地址计算出访问者的归属地,并且按照省份,计算出访问次数,最后将计算好的结果写入到Mysql中

    2.思路分析

    1)整理访问日志中的数据,切分出ip字段,然后将ip字段转换成十进制

    2)加载ip地址的规则,取出有用的字段,然后将数据缓存到内存中(Executor中的内存)

    3)将访问日志中的ip与ip地址的规则进行匹配(使用二分查找进行匹配)

    4)取出对应的省份名称,将其和1组合在一起

    5)按照省份名进行聚合

    6)将聚合后的数据写入Mysql

    3.本地模式实现

    有了上边的分析,我们可以现在本地模式下实现一下,在本地模式下实现起来比较简单

    先放上实现代码和效果:

    package cn.ysjh0014
    
    import scala.io.{BufferedSource, Source}
    
    object TestIp {
    
      //将ip地址转换为十进制
      def ip2Long(ip: String): Long = {
        val fragments = ip.split("[.]")
        var ipNum = 0L
        for (i <- 0 until fragments.length) {
          ipNum = fragments(i).toLong | ipNum << 8L
        }
        ipNum
      }
    
      //读取ip规则,并整理
      def readRules(path: String): Array[(Long, Long, String)] = {
        //读取ip规则
        val bf: BufferedSource = Source.fromFile(path)
        val lines: Iterator[String] = bf.getLines()
        //对ip规则进行整理,并放入到内存
        val rules: Array[(Long, Long, String)] = lines.map(line => {
          val fileds = line.split("[|]")
          val startNum = fileds(2).toLong
          val endNum = fileds(3).toLong
          val province = fileds(7)
          (startNum, endNum, province)
        }).toArray
        rules
      }
    
      //二分查找
      def binarySearch(lines: Array[(Long, Long, String)], ip: Long): Int = {
        var low = 0
        var high = lines.length - 1
        while (low <= high) {
          val middle = (low + high) / 2
          if ((ip >= lines(middle)._1) && (ip <= lines(middle)._2))
            return middle
          if (ip < lines(middle)._1)
            high = middle - 1
          else {
            low = middle + 1
          }
        }
        -1
      }
    
      def main(args: Array[String]): Unit = {
        //读取ip规则,这些数据是在内存中
        val rules: Array[(Long, Long, String)] = readRules("D:\\视频\\小牛学堂-2018\\06-Spark安装部署到高级-10天\\spark-04-Spark案例讲解\\课件与代码\\ip\\ip.txt")
    
        //将ip转换为十进制
        val ipNum = ip2Long("120.78.142.230")
    
        //查找
        val index = binarySearch(rules, ipNum)
    
        var Num = "未查找到该ip所在地区"
    
        if (index != -1) {
          Num = rules(index)._3
        }
        print(Num)
      }
    }
    

    运行结果:

    \

    上边测试的ip地址是我买的阿里云的服务器的公网ip地址,广东省深圳市的,还算比较准确,这个ip地址的规则实在淘宝买的,比较早期的,不是很全面

    日志文件及ip地址规则下载: 链接:https://pan.baidu.com/s/1G0DuO2pTbYCm-Ym6V0KDYw
    提取码:6egh

    上一篇:遗传算法的一些个人看法
    下一篇:IDEA输出jar包步骤流程
    相关文章
    图文推荐

    关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 神奇公式秒杀全国11选5

    版权所有: 神奇公式秒杀全国11选5--致力于做实用的IT技术学习网站

  • 监察体制改革后 湘西半年72名公职人员主动交代问题 2019-05-12
  • 媒体宣传报道重庆日报 王国平:扮靓重庆两江四岸” 让城市有机更新 2019-04-26
  • 我相信“交警雨中护送高考生”是真,“交警雨中护送高考生”反被该高考生家长投诉是假。 2019-04-16
  • 14名消防员日巡逻28公里 洗冷水澡 2019-04-10
  • 靶壕有了“蓝军”,百发百中的“神枪手”练起来 2019-04-10
  • 不是秀强大了,别人就会来做朋友,这逻辑不对 2019-04-01
  • 候选企业:中国石油呼和浩特石化公司 2019-03-26
  • 航天员沙漠野外生存训练完美收官!为第一天团打call 2019-03-25
  • 请问,建立市场经济后,原计划经济哪里去?改革后,我们还在实行计划经济,为何没有提及? 2019-03-25
  • 构建年轻干部梯次培养链 2019-03-19
  • 孙实的专栏作者中国国家地理网 2019-03-15
  • 湖南师范大学举行研究阐释党的十九大精神国家社科基金重大专项学术研讨会 2019-03-15
  • [雷人]蠢货!土地处于不同的城市和地段,关联的资源不一样,价值也不一样。不然给咱俩同样面积的土地,咱的在北上广深,你的在边远山区,你干么? 2019-03-08
  • 国际社会持续热议上合青岛峰会:上合组织发展进入新阶段 彰显中国领导力 2019-03-08
  • 珍惜野生动物频现甘孜境内 生态环境质量不断提升 2019-03-06