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 <- until fragments.length){
ipNum = fragments(i).toLong | ipNum << 8L //8进制变为10进制
}
ipNum
}
//进行二分法的查找,这个的前提是顺序已经是排序过的了
def binarySearch(lines: ArrayBuffer[String], ip: Long) : Int = {
var low =
var high = lines.length -
while (low <= high) {
val middle = (low + high) /
if ((ip >= lines(middle).split("\\|")().toLong) && (ip <= lines(middle).split("\\|")().toLong))
return middle
if (ip < lines(middle).split("\\|")().toLong)
high = middle -
else {
low = middle +
}
}
-
}
//从一个文件里面读取数据
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))
}
}
spark练习--由IP得到所在地的更多相关文章
- Q&A - 如何获取ip地址所在地
获取其IP地址后,传入以下URL,并请求该URL,该请求会响应一个JSON格式的数据包,该IP地址的所在地均在这个数据包内 http://int.dpool.sina.com.cn/iplooku ...
- 使用redis有序集合sorted set设计高效查询ip所在地
1.将纯真版ip数据 xxx.data 导入至 redis(整个过程只花费了几秒) 引入nuget包 CSRedisCore,使用方法见:https://github.com/2881099/csr ...
- node.js使用免费的阿里云ip查询获取ip所在地
在项目过程中,我们常常需要获取IP的所在地.而这一功能一般都是通过一些数据网站的对外接口来实现,这些接口一般情况下都是付费使用的.在这篇文章中我将记录,基于node.js的阿里云免费IP地址查询接口的 ...
- 通过IP获取对应所在地的地址
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangshuxuncom/article/details/35988143 曾几何时 ...
- php获取客户端IP地址、所在地、操作系统、浏览器信息
本实例主要实现获取客户端的IP,再根据获取的IP获取所在地,还可以获取用户当前电脑使用的操作系统以及用户是通过什么浏览器进行访问的. 您可以在这里查看具体演示和下载demo http://www.j ...
- 根据IP获取省市 .
public class IPAddress { /// <summary> /// 得到真实IP以及所在地详细信息(Porschev) /// </summary> /// ...
- 大数据平台搭建(hadoop+spark)
大数据平台搭建(hadoop+spark) 一.基本信息 1. 服务器基本信息 主机名 ip地址 安装服务 spark-master 172.16.200.81 jdk.hadoop.spark.sc ...
- C# 获取网页数据、获取本机IP 分类: C# 2014-12-16 14:59 308人阅读 评论(0) 收藏
说明: (1) http://www.3322.org/dyndns/getip 这个网址可以获取本机IP,读取的内容就是本机IP (2)方法经测试,可以实现. (3)参考:http://www.cn ...
- 关于httpservletrequest的获取真实的ip
via 值为: 下面是一些DemoWTP/1.1 GDSZ-PS-GW010-WAP05.gd.chinamobile.com (Nokia WAP Gateway 4.0 CD3/ECD13_C/N ...
随机推荐
- Charles基础
一.Charles 监控其他设备连接方式 1.XP系统:控制面板——>Internet选项——>连接(tab)——>局域网(LAN)设置——>局域网设置——>代理服务器, ...
- Prometheus Node_exporter metrics 之 Basic CPU / Mem / Disk Info
Basic CPU / Mem / Disk Info 1. CPU Cores 物理 CPU 的核数 cat /proc/cpuinfo| grep "cpu cores"| u ...
- IDEA 导入javaWeb项目
导入后的项目 1. 把项目变成web项目 配置 artifact 然后这边就自动配置成了 tomcat: 然后运行 没有毛病!!
- Asp.net单点登录解决方案
原文出处:http://www.cnblogs.com/wu-jian 主站:Passport集中验证服务器,DEMO中为:http://www.passport.com/ 分站:http://www ...
- Script" References MACLEAN‘s post Speed up the index creation.
alter session set workarea_size_policy=MANUAL; alter session set db_file_multiblock_read_count=512; ...
- 如何让触摸事件穿透一个View
如何让触摸事件穿透一个View 偶然间发现,如何屏蔽或者让触摸事件穿透一个view是一个很简单的事情. 现象: 源码: // // ViewController.m // UserInteractio ...
- django中的权限控制(form增删改)
Django默认提供了权限控制,但只能对使用了其自带的登录认证的用户进行权限控制,说白了就是只能对存储在auth_user表中的用户进行权限控制,但不能对未登录过的用户进行权限控制.但如果通过集成LD ...
- November 18th 2016 Week 47th Friday
Get a livelihood and then practise virtue. 先谋生,而后修身. If you can't earn a life, all the things you ha ...
- codeforces 432E Square Tiling
codeforces 432E Square Tiling 题意 题解 代码 #include<bits/stdc++.h> using namespace std; #define fi ...
- php实现简单的单链表
<?php /** * 建立一个链表,节点的data为数组,记录一个id,完成链表所以操作 */ //结点,结点数据data定义为一个数组,id和value class Node{ public ...