本帖最后由 PeersLee 于 2017-5-8 20:24 编辑
问题导读:
1. ip库每个字段都是什么意思?
2. 如何使用ip库?
解决方案:
1. 字段介绍以及讲解
所谓IP地址就是给每个连接在互联网上的主机分配的一个32位地址,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节,IP地址经常被写成十进制的形式,中间使用符号“.”分开不同的字节。但是事实上,ip就是一个32位的2进制数.
- 0.0.0.0 0.255.255.255 IANA,保留地址
- 1.0.0.0 1.0.0.255 澳大利亚, CZ88.NET
- 1.0.1.0 1.0.3.255 福建省,电信
- 1.0.4.0 1.0.7.255 澳大利亚, CZ88.NET
- 1.0.8.0 1.0.15.255 广东省,电信
- 1.0.16.0 1.0.31.255 日本,Beacon服务器
- 1.0.32.0 1.0.63.255 广东省,电信
- 1.0.64.0 1.0.127.255 日本,広島県中区大手町Energia通信公司
- 1.0.128.0 1.0.255.255 泰国, CZ88.NET
- 1.1.0.0 1.1.0.255 福建省,电信
- 1.1.1.0 1.1.1.255 澳大利亚,亚太互联网络信息中心
- 1.1.2.0 1.1.7.255 福建省,电信
- 1.1.8.0 1.1.63.255 广东省,电信
- 1.1.64.0 1.1.127.255 日本,东京都新宿区歌舞伎町i2ts公司
- 1.1.128.0 1.1.142.255 泰国,穆达汉
- 1.1.143.0 1.1.144.255 泰国, CZ88.NET
- 1.1.145.0 1.1.147.255 泰国,沙功那空
- 1.1.148.0 1.1.149.255 泰国, CZ88.NET
- 1.1.150.0 1.1.150.128 泰国,沙功那空
- 1.1.150.129 1.1.150.255 泰国,曼谷
- 1.1.151.0 1.1.151.255 泰国, CZ88.NET
复制代码
如ip, 1.1.151.0 1.1.151.255 泰国, CZ88.NET ,ip范围在 1.1.151.0 1.1.151.255 的是泰国, CZ88.NET
2. 从本读取并打印
- import org.apache.spark.{SparkConf, SparkContext}
- import scala.util.matching.Regex
- /**
- * Created by peerslee on 17-3-10.
- */
- object IP {
- // 将ip地址转换为整数
- def ip2num(ip : String) : Long = {
- val fragments = ip.split("\\.")
- var ipNum = 0L
- for (i <- 0 until fragments.length) {
- // 与运算
- ipNum = fragments(i).toLong | ipNum << 8L
- }
- ipNum
- }
- def main (args : Array[String]): Unit = {
- val conf = new SparkConf().setAppName("IpLocationByTime").setMaster("local")
- val sc = new SparkContext(conf)
- // 加载ip属地规则
- val ipRuelsRdd = sc.textFile("/home/peerslee/spark_data/ip_part1.txt").map(line =>
- // map RDD 的Transformation 操作,用 f 处理一个Rdd 的所有元素,将结果输出到另一个Rdd
- {
- val fields = line.trim().split("\t")
- val start_num = ip2num(fields(0).trim())
- val end_num = ip2num(fields(1).trim())
- val province = fields(2).trim()
- (start_num, end_num, province)
- })
- ipRuelsRdd.collect().foreach(println)
- sc.stop()
- }
- }
复制代码
结果:
- 17/05/08 20:18:10 INFO DAGScheduler: ResultStage 0 (collect at IP.scala:33) finished in 0.196 s
- 17/05/08 20:18:10 INFO DAGScheduler: Job 0 finished: collect at IP.scala:33, took 0.304352 s
- (0,16777215,IANA,保留地址)
- (16777216,16777471,澳大利亚, CZ88.NET)
- (16777472,16778239,福建省,电信)
- (16778240,16779263,澳大利亚, CZ88.NET)
- (16779264,16781311,广东省,电信)
- (16781312,16785407,日本,Beacon服务器)
- (16785408,16793599,广东省,电信)
- (16793600,16809983,日本,広島県中区大手町Energia通信公司)
- (16809984,16842751,泰国, CZ88.NET)
- (16842752,16843007,福建省,电信)
- (16843008,16843263,澳大利亚,亚太互联网络信息中心)
- (16843264,16844799,福建省,电信)
- (16844800,16859135,广东省,电信)
- (16859136,16875519,日本,东京都新宿区歌舞伎町i2ts公司)
- (16875520,16879359,泰国,穆达汉)
- (16879360,16879871,泰国, CZ88.NET)
- (16879872,16880639,泰国,沙功那空)
- (16880640,16881151,泰国, CZ88.NET)
- (16881152,16881280,泰国,沙功那空)
- (16881281,16881407,泰国,曼谷)
- (16881408,16881663,泰国, CZ88.NET)
- 17/05/08 20:18:10 INFO SparkUI: Stopped Spark web UI at [url]http://172.26.44.187:4040[/url]
- 17/05/08 20:18:10 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!
复制代码
链接: https://pan.baidu.com/s/1c5vbBo 密码: wvg2
|
|