先来看看我们需要操作的文件:
左边是我们的访问日志,右边是ip规则,而我们需要做的就是
根据左边的访问记录中的ip,在ip规则中确定出这条记录所在的省份。
我们在整个操作中会用到二分查找,因为这样会快速定位。
还有将ip转换为long值的方法。
还会用到广播变量,这样就会节省资源。
package com.test.IpText
object IpTest{
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
}
def binarySearch(lines:Array[(Long,Long,String)],ip:Long):Int = {
var low = 0
var high