版权声明:转载请链接 https://blog.csdn.net/DPnice/article/details/81566654
两个IP范围:
10.100.1.1-10.100.1.254
10.100.1.1-10.100.2.62
转换成 10.100.1.1-10.100.1.254
或者两个IP范围:
10.100.1.100-10.100.1.150
10.100.1.120-10.100.1.250
转换成 10.100.1.100-10.100.1.250
IP文件部分:
10.1.0.0-10.1.255.255
10.1.0.130
10.1.0.14
10.1.1.92
10.1.114.114
10.1.14.0-10.1.14.255
10.1.14.23-10.1.14.27
10.1.195.0-10.1.195.255
10.1.2.100
10.131.12.0-10.131.12.255
10.131.120.0-10.131.127.255
10.131.128.0-10.131.255.255
10.131.13.0-10.131.13.31
10.131.13.128-10.131.13.255
10.131.13.32-10.131.13.63
10.131.13.64-10.131.13.95
10.131.13.96-10.131.13.127
10.131.14.0-10.131.14.31
10.131.14.128-10.131.14.255
10.131.14.32-10.131.14.63
10.131.14.64-10.131.14.95
10.131.14.96-10.131.14.127
10.131.15.0-10.131.15.255
10.131.16.0-10.131.16.255
10.131.17.0-10.131.17.127
10.131.17.128-10.131.17.159
10.131.17.160-10.131.17.191
10.131.17.192-10.131.17.255
10.131.18.0-10.131.18.127
10.131.18.128-10.131.18.255
10.131.19.0-10.131.19.255
10.131.2.0-10.131.2.255
10.131.20.0-10.131.21.255
10.131.22.0-10.131.22.255
10.131.23.0-10.131.23.127
10.131.23.128-10.131.23.255
10.131.24.0-10.131.24.127
10.131.24.128-10.131.24.255
10.131.25.0-10.131.25.255
10.131.26.0-10.131.28.255
10.131.29.0-10.131.33.255
10.131.3.0-10.131.3.255
10.131.34.0-10.131.39.255
10.131.4.0-10.131.4.255
10.131.40.0-10.131.45.255
10.131.46.0-10.131.51.255
10.131.5.0-10.131.5.127
10.131.5.128-10.131.5.255
10.131.52.0-10.131.57.255
10.131.58.0-10.131.66.255
10.131.6.0-10.131.6.127
10.131.6.128-10.131.6.255
10.131.67.0-10.131.73.255
10.131.7.0-10.131.7.127
10.131.7.128-10.131.7.255
10.131.74.0-10.131.82.255
10.131.8.0-10.131.8.63
10.131.8.128-10.131.8.255
10.131.8.64-10.131.8.95
10.131.8.96-10.131.8.127
10.131.83.0-10.131.89.255
10.131.9.0-10.131.9.255
10.131.90.0-10.131.96.255
10.131.97.0-10.131.102.255
10.132.0.0-10.132.7.255
10.132.102.0-10.132.107.255
10.132.108.0-10.132.113.255
10.132.114.0-10.132.119.255
10.132.120.0-10.132.123.255
10.132.124.0-10.132.127.255
10.132.128.0-10.132.129.255
10.132.132.0-10.132.137.255
10.132.138.0-10.132.138.255
10.132.139.0-10.132.143.255
10.132.144.0-10.132.146.255
10.132.148.0-10.132.148.255
10.132.150.0-10.132.153.255
10.132.154.0-10.132.154.255
10.132.156.0-10.132.156.255
10.132.157.0-10.132.158.255
10.132.159.0-10.132.165.255
10.132.16.0-10.132.19.255
10.49.53.0-10.49.53.255
10.49.54.0-10.49.54.255
10.49.55.0-10.49.55.255
10.49.56.0-10.49.56.255
10.49.57.0-10.49.57.255
10.49.58.0-10.49.58.255
10.49.59.0-10.49.59.255
10.49.6.0-10.49.6.255
10.49.60.0-10.49.60.255
10.49.61.0-10.49.61.255
10.49.62.0-10.49.62.255
10.49.63.0-10.49.63.255
10.49.64.0-10.49.64.255
10.49.65.0-10.49.65.255
10.49.66.0-10.49.66.255
Scala代码:
package com.doctorai.dpnice.testdemo
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession
/**
* @author DPn!ce date 2018 08 10 下午 1:47
*/
object IPIntersection extends App {
val sparkSession = SparkSession.builder.
master("local[1]")
.appName("IPIntersection")
.getOrCreate()
val sc = sparkSession.sparkContext
private val IPFile: RDD[String] = sc.textFile("C:\\Users\\Administrator\\Documents\\WeChat Files\\DPnnnnnnnnnnnnnnnice\\Files\\ip.txt")
IPFile.flatMap(_.split("-")).map(ip => {
val strings = ip.split("\\.")
val sb = new StringBuilder()
val key = sb.append(strings(0)).append(".").append(strings(1)).append(".").append(strings(2))
(key.toString(), strings(3))
}).reduceByKey((x, y) => {
var result = ""
if (x.contains("-")) {
val xMin = Integer.parseInt(x.split("-")(0))
val xMax = Integer.parseInt(x.split("-")(1))
val i = Integer.parseInt(y)
if (i < xMin) {
result = i + "-" + xMax
} else if (i > xMax) {
result = xMin + "-" + i
} else {
result = x
}
} else {
result = x + "-" + y
}
result
}).map(t => {
val sb = new StringBuilder
if (t._2.contains("-")) {
val f = t._2.split("-")(0)
val l = t._2.split("-")(1)
sb.append(t._1).append(".").append(f).append("-").append(t._1).append(".").append(l)
} else {
sb.append(t._1).append(".").append(t._2)
}
sb.toString()
}).saveAsTextFile("C:\\Users\\Administrator\\Desktop\\out")
}
其实就是将每个范围的前三段 为 key 最后一段 作为 value 进行 reduceByKey ,将小的放在左大的放在右。hin简单。