map運算元原始碼分析

2021-10-25 17:14:37 字數 2021 閱讀 5917

val rdd1 = sc.

parallelize

(list(1

,2,3

,4,5

))rdd1.

map(a=

>a*2)

.collect()

.foreach

(println

(_))

def map[u: classtag]

(f: t =

> u)

: rdd[u]

= withscope

private

[spark] def clean[f <

: anyref]

(f: f, checkserializable: boolean =

true

): f =

def clean

( closure: anyref,

checkserializable: boolean =

true

, cleantransitively: boolean =

true

): unit =

private def clean

( func: anyref,

checkserializable: boolean,

cleantransitively: boolean,

accessedfields: map[class[_]

, set[string]])

: unit =")

return

}//否則進行一些清理工作,具體什麼工作暫時不細究了

// todo: clean all inner closures first. this requires us to find the inner objects.

// todo: cache outerclasses / innerclasses / accessedfields

def map[u: classtag]

(f: t =

> u)

: rdd[u]

= withscope

通過檢視firstparent原始碼可以看到,新的rdd分割槽取決於rdd依賴中上乙個rdd的分割槽資訊,這也就驗證了map運算元不會改變分割槽數量

protected

[spark] def firstparent[u: classtag]

: rdd[u]

=

private

[spark]

class

[u: classtag, t: classtag]

( var prev: rdd[t]

, f:

(taskcontext, int, iterator[t])=

> iterator[u]

,// (taskcontext, partition index, iterator)

preservespartitioning: boolean =

false

, isfrombarrier: boolean =

false

, isordersensitive: boolean =

false

)extends

rdd[u]

(prev)

override def compute

(split: partition, context: taskcontext)

: iterator[u]=f

(context, split.index, firstparent[t]

.iterator

(split, context)

)

Map集合 原始碼分析

map的實現類的結構 map 雙列資料,儲存key value對的資料 hashmap 作為map的主要實現類 執行緒不安全的,效率高 可以儲存null和key的value hashmap的底層 陣列 鍊錶 jdk7之前 陣列 鍊錶 紅黑樹 jdk8 linkedhashmap 保證在遍歷map元素...

關於Map的原始碼分析

map是乙個介面,其中有一些常用的方法,j a8以後新增了很多新方法 j a8中新增的方法 其中都有這樣一句話 預設實現不會保證此方法的同步或原子屬性。提供原子性保證的任何實現都必須覆蓋此方法並記錄其併發屬性。1 返回的結果為指定鍵對映到的值,如果此對映不包含該鍵的對映,defaultvalue d...

map原始碼解析

public v put k key,v value 若沒有在table i 位置找到相同的key,則新增key到table i 位置,新的元素總是在table i 位置的第乙個元素,原來的元素後移 modcount addentry hash,key,value,i return null voi...