key value型Rdd轉廣播變數時注意

2021-08-14 03:27:05 字數 1517 閱讀 1367

當將乙個(key,value)型

rdd轉成廣播變數時,需要將該

rdd轉成

map型別,但是若乙個

key對應多個

value

,直接使用

collectasmap()

方法時,

key值相同的

value

會被覆蓋,所以不能直接使用

collectasmap()

方法。那怎麼辦了?應該使用

collect() + foldleft()

的方式,組成

mutable.hashmap

物件。collect()

將rdd

轉成array

,foldleft()

將相同key

值的value

組合成乙個

array

,最後生成乙個

map即可。後續方便廣播變數使用。

程式測試結果:

**如下:

//collectasmap將key值相同的value進行覆蓋,測試如下:

valdata = sc.parallelize(list

((1,"www"), (1,"iteblog"), (1,"com"), (2,"bbs"), (2,"iteblog"), (2,"com"), (3,"good")))

println("原始data:")

data.foreach(x => print(x +";"));println();println()

valdata2 = data.collectasmap

println("collectasmap後:")

data2.foreach(println(_));println();println()

valdata3: array[(int, string)] = data.collect()

//把如上的array摺疊起來

valdata4 = data3.foldleft(scala.collection.mutable.hashmap[int, arraybuffer[string]]())((curh, item) =>

else

})println("foldleft後:")

data4.foreach(println(_))

key,value集合轉實體類

在專案中碰到類似的情景,比較有意思,記錄一下 我手上有乙個集合,集合中有乙個實體類的欄位名稱和他的值,但是都是string型別的。需要將這個集合轉換為這個實體類。過程問題如下 1.我手上只有集合如何判定他是哪個實體類?2.集合中key和value都是string型別,如何轉換為對應的資料型別 3.如...

json 轉 map,迴圈得到 key,value

string str 第一種方式 map maps map json.parse str system.out.println 這個是用json類來解析json字串 for object map maps.entryset 第二種方式 map maptypes json.parseobject st...

浮點型轉string

方法1 sprintf char destination,char double float 是用destination來儲存double float值的字元 然後直接string a destination 該方法有乙個缺點,就是儲存的值可能和輸入的double float的值有誤差,即最後字串a...