spark练习--由IP得到所在地

  今天我们就来介绍,如何根据一个IP来求出这个IP所在的地址是什么,首先我们如果要做这个内容,那么我们要有一个IP地址的所在地字典,这个我们可以在网上购买,形如:

  

1.0.1.0|1.0.3.255|16777472|16778239|亚洲|中国|福建|福州||电信|350100|China|CN|119.306239|26.075302
1.0.8.0|1.0.15.255|16779264|16781311|亚洲|中国|广东|广州||电信|440100|China|CN|113.280637|23.125178
1.0.32.0|1.0.63.255|16785408|16793599|亚洲|中国|广东|广州||电信|440100|China|CN|113.280637|23.125178
1.1.0.0|1.1.0.255|16842752|16843007|亚洲|中国|福建|福州||电信|350100|China|CN|119.306239|26.075302

   这个只是其中的一个小部分,我们可以来介绍一下这个如何查看,当我如果获取一个IP,那我们首先先把这个IP转换成为一个Long型的值,其中的转换方法,后文会有介绍,然后我们在看上面的数据,以第一条数据为例

  1.0.1.0|1.0.3.255|16777472|16778239|亚洲|中国|福建|福州||电信|350100|China|CN|119.306239|26.075302

  这个以‘|‘来作为分隔符,其中的第二三个数字分别为:16777472,16778239这两个数字,这个表示如果我们把上面的IP转换成为Long值的情况,如果这个long的大小在16777472与16778239之间,那我们就可以说,这个IP是中国福建的电信,好了,解释完成之后,我们就可以开始写代码了

package cn.wj.spark.day06

import java.io.{BufferedReader, FileInputStream, InputStreamReader}

import scala.collection.mutable.ArrayBuffer

/**
  * Created by WJ on 2017/1/4.
  */
object IPLocationDemo_2 {

  // 将IP转换成为Long值
  def ip2Long(ip:String):Long ={
    val fragments = ip.split("[.]")
    var ipNum = 0L
    for(i <- 0 until fragments.length){
      ipNum = fragments(i).toLong | ipNum << 8L       //8进制变为10进制
    }
    ipNum
  }
   //进行二分法的查找,这个的前提是顺序已经是排序过的了
  def binarySearch(lines: ArrayBuffer[String], ip: Long) : Int = {
    var low = 0
    var high = lines.length - 1
    while (low <= high) {
      val middle = (low + high) / 2
      if ((ip >= lines(middle).split("\\|")(2).toLong) && (ip <= lines(middle).split("\\|")(3).toLong))
        return middle
      if (ip < lines(middle).split("\\|")(2).toLong)
        high = middle - 1
      else {
        low = middle + 1
      }
    }
    -1
  }

  //从一个文件里面读取数据
  def readData(path:String) = {
    val br = new BufferedReader(new InputStreamReader(new FileInputStream(path)))
    var s:String  = null
    var flag = true
    var lines = ArrayBuffer[String]()
    while(flag){
      s = br.readLine()
      if(s != null)
        lines += s
      else
        flag = false
    }
    lines
  }

  def main(args: Array[String]): Unit = {
    val ip ="118.144.130.10"
    val ipNum = ip2Long(ip)
    println(ipNum)
    val lines = readData("e://Test/ip.txt")
    val index = binarySearch(lines,ipNum)
    println(lines(index))
  }
}

  

时间: 2024-08-06 03:41:58

spark练习--由IP得到所在地的相关文章

通过IP获取相应所在地的地址

曾几何时通过IP获取相应所在地的地址一直是一个梦想,曾经为止努力过,但效果并不是很好,现在将努力的成果(某些来源于网络)粘贴出来,希望对某些人有所启发,倘若有人有新的见解,还望不惜赐教: 1.借助外网实现获取IP相应所在地地址的目的: import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URL

Spark in action Spark 以及SparkR的安装配置说明

Spark以及SparkR的安装(standalone模式) From :ssdutsu @ Inspur Company  [email protected] 操作系统 CentOS 7 Java 版本 JDK 1.7 Spark安装过程请见PDF文件 Spark 1.0的安装配置文件 网址:http://www.it165.net/admin/html/201407/3379.html (别忘了配置免密码登陆和关闭防火墙) 下面重点描述如何在linux环境下安装R,Rstudio 以及Spa

在WebService中处理IP地址

//在webService中写到: import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.xml.ws.WebServiceContext;import javax.xml.ws.handler.MessageContext; import org.apache.cxf.transport.http.AbstractHTTPDestination;import org.

动手搭建docker并在docker容器中建spark集群

本人亲自测试搭建,由于是初学一路搭建下来走了不少弯路.如有不对或更简洁的步骤请提出环境: win10上安装的虚拟机,虚拟机装的centos7,并liunx界面化(之前搭建一次在网和端口都可以telnet前提下,就是访问不了docker容器中的服务地址,此次是为了防止宿机不能访问下用虚拟机界面浏览器),centos7的命令和centos6有区别,而且centos7中是没有iptables命令,如要使用自己安装.本人搭建的 虚拟机ip:192.168.20.129spark master节点IP:

IP地址查询API

这是查询指定IP地址的方法,还可以直接查看当IP地址1. js方法 <script type="text/javascript" src="[http://ip.chinaz.com/getip.aspx](http://ip.chinaz.com/getip.aspx)"></script>,可以实时的显示当前IP地址所在地,使用效果可以点击我博客上方的扩展功能.2. 也可以直接访问 http://ip.chinaz.com/getip.a

spark学习(五)

(一)进入spark-shell命令界面(默认使用scala的命令界面) 1,如果进入了spark安装目录则使用. 1,一台机器启动spark:./bin/spark-shell --master <master-url>命令可进入shell界面,master-url参数可为:local[*]使用逻辑CPU多线程启动,local[n],使用n个CPU线程启动 2,集群下启动spark:spark://主机IP:7077(默认端口) 3,在CLASSPATH中添加jar包:./bin/spark

HTTP 请求头中的 X-Forwarded-For

我一直认为,对于从事 Web 前端开发的同学来说,HTTP 协议以及其他常见的网络知识属于必备项.一方面,前端很多工作如 Web 性能优化,大部分规则都跟 HTTP.HTTPS.SPDY 和 TCP 等协议的特点直接对应,如果不从协议本身出发而是一味地照办教条,很可能适得其反.另一方面,随着 Node 的发展壮大,越来越多的前端同学开始写服务端程序,甚至是框架( ThinkJS 就是这样由前端工程师开发,并有着众多前端工程师用户的 Node 框架),掌握必要的网络知识,对于服务端程序安全.部署.

webservice发布服务:CXF及客户端调用

2.CXF:(与spring整合) CXF相对来说操作没有AXIS繁琐 1.导入spring的jar包和cxf的jar包 2.在spring的核心配置文件中配置发布的接口类 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.o

手机/电脑的定位方式

主要有四种方法:按精度高低,依次是GPS定位, WIFI定位,基站定位,IP定位.其实,如果有离线数据在本地,那不联网也能定位,参见百度地图离线导航定位的原理?, 不过,联网时,定位精度可能会更好些.HTML5提供了地理定位的接口,而具体实现虽然因每个浏览器而异,但也是下面这几种方式. No1. GPS定位 这个需要GPS模块硬件,一般电脑上没有这个模块,所以无法使用.GPS定位是不消耗网络流量的,因为是与卫星通信,可以不用连接互联网,我们之所以要连接互联网, 只是因为没有使用离线地图.车载GP