Spark Core之ip位址分析

2021-10-06 12:42:35 字數 2515 閱讀 6624

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...