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