ip日誌資訊
在ip日誌資訊中,我們只需要關心ip這乙個維度就可以了,其他的不做介紹
城市ip段資訊
思路
1、 載入城市ip段資訊,獲取ip起始數字和結束數字,經度,維度
2、 載入日誌資料,獲取ip資訊,然後轉換為數字,和ip段比較
3、 比較的時候採用二分法查詢,找到對應的經度和維度
4、 然後對經度和維度做單詞計數
**如下
//todo:建立sparkconf 設定引數
val sparkconf: sparkconf =
newsparkconf()
.("iplocaltion").
setmaster
("local[2]"
)//todo:建立sparkcontext
val sc =
newsparkcontext
(sparkconf)
//todo:讀取基站資料
val data: rdd[string]
= sc.
textfile
(args(0
))//todo:對基站資料進行切分 ,獲取需要的字段 (ipstart,ipend,城市位置,經度,緯度)
val jizhanrdd = data.
map(_.
split
("\\|"))
.map
( x =
>(x
(2),
x(3)
,x(4
)+"-"+x(
5)+"-"+x
(6)+
"-"+x(
7)+"-"+x
(8),
x(13)
,x(14
)))//todo:獲取rdd的資料
val jizhandata = jizhanrdd.
collect()
//todo:廣播變數,乙個唯讀的資料區,所有的task都能讀到的地方
val jizhanbroadcast = sc.
broadcast
(jizhandata)
//todo:讀取目標資料
val destdata = sc.
textfile
("d:\\data\\ip.format"
)//todo:獲取資料中的ip位址字段
val ipdata: rdd[string]
= destdata.
map(_.
split
("\\|"))
.map
(x=>x(
1))//todo:把ip位址轉化為long型別,然後通過二分法去基站資料中查詢,找到的維度做wordcount
val result=ipdata.
(iter=
>)}
)//todo:分組聚合
val resultfinal: rdd[
((string, string)
, int)
]= result.
reducebykey
(_+_)
//todo:列印輸出
resultfinal.
foreach
(tuple =
>
println
(tuple)
)//todo:將結果儲存到mysql表中
resultfinal.
map(x=
>
(x._1._1,x._1._2,x._2)).
foreachpartition
(data2mysql)
sc.stop()
}//todo:ip轉為long型別
def iptolong
(ip: string)
: long =
ipnum
}//todo:通過二分查詢法,獲取ip在廣播變數中的下標
def binarysearch
(ipnum: long, valuearr: array[
(string, string, string, string, string)])
: int =
if(ipnum >
valuearr
(middle)
._2.tolong)
if(ipnum<
valuearr
(middle)
._1.tolong)}-
1}//todo:資料儲存到mysql表中
def data2mysql
(iterator:iterator[
(string,string, int)])
:unit =)}
catch
finally
if(conn!=null)
}
Spark Core 子模組 Shuffle 分析
一 前言 1.相關版本 spark master branch 2018.10,compiled version spark 2.5.0,相關的測試設定了spark.shuffle.sort.bypassmergethreshold 1 和 yarn client 模式 hibench 6.0 an...
IP協議詳解之IP位址要領
1.前言 整個的網際網路就是乙個單一的 抽象的網路。而ip位址就是給網際網路上的每乙個主機 或路由器 的每乙個介面分配乙個在全世界範圍是唯一的32位的識別符號。ip位址的結構使我們可以在網際網路上很方便地進行定址。但是,根據tcp ip協議的規定的ip位址是由32位二進位制數組成的,例如 11010...
IP協議詳解之IP位址要領
1.前言 整個的網際網路就是乙個單一的 抽象的網路。而ip位址就是給網際網路上的每乙個主機 或路由器 的每乙個介面分配乙個在全世界範圍是唯一的32位的識別符號。ip位址的結構使我們可以在網際網路上很方便地進行定址。但是,根據tcp ip協議的規定的ip位址是由32位二進位制數組成的,例如 11010...