解決scala.collection.mutable.Map寫入的問題
在scala中可變Map寫入
使用
val no2ID = scala.collection.mutable.Map[Int,String]() no2ID += (1 -> "something")
而在以下代碼中,Map不能添加元素
val no2ID = scala.collection.mutable.Map[Int,String]() sc.textFile(conf).foreach(line=>{ val splits = line.split(“,”) val no = splits(0).trim.toInt val ID = splits(1) no2ID += (no -> ID) })
其中conf文件為數(shù)字和對(duì)應(yīng)的人名
把RDD使用collect轉(zhuǎn)化成Array后,可以向Map添加元素
val no2ID = scala.collection.mutable.Map[Int,String]() sc.textFile(conf).collect().foreach(line=>{ val splits = line.split(“,”) val no = splits(0).trim.toInt val ID = splits(1) no2ID += (no -> ID) })
scala中的Map使用例子
Map結(jié)構(gòu)是一種非常常見的結(jié)構(gòu),在各種程序語言都有對(duì)應(yīng)的api,由于Spark的底層語言是Scala,所以有必要來了解下Scala中的Map使用方法。
(1)不可變Map
特點(diǎn):
api不太豐富
如果是var修飾,引用可變,支持讀寫
如果是val修飾,引用不可變,只能寫入一次值,其后只讀
var a:Map[String,Int]=Map("k1"->1,"k2"->2)//初始化構(gòu)造函數(shù) a += ("k3"->3)//添加元素 a += ("k4"->4)//添加元素 a += ("k1"->100)//已經(jīng)存在添加元素會(huì)覆蓋 a -= ("k2","k1")//刪除元素 // a("k1") = "foo"http://不支持 println(a.contains("k6"))//是否包含某元素 println(a.size)//打印大小 println(a.get("k1").getOrElse("default")) //根據(jù)key讀取元素,不存在就替換成默認(rèn)值 a.foreach{case (e,i) => println(e,i)} //遍歷打印1 for( (k,v)<-a ) println(k,v) //遍歷打印2 println(a.isEmpty)//判斷是否為空 a.keys.foreach(println)//只打印key a.values.foreach(println)//只打印value a=Map()//數(shù)據(jù)清空使用再次new println(a.size) a.toSeq.sortBy(_._1)//升序排序 key a.toSeq.sortBy(_._2)//升序排序 value a.toSeq.sortWith(_._1>_._1) //降序排序 key a.toSeq.sortWith(_._2>_._2) //降序排序 value //下面自定義按英文字母或數(shù)字排序 implicit val KeyOrdering=new Ordering[String] { override def compare(x: String, y: String): Int = { x.compareTo(y) } } println(a.toSeq.sorted)
(2)可變Map例子
特點(diǎn):
api豐富與Java中Map基本類似
如果是var修飾,引用可變,支持讀寫
如果是val修飾,引用不可變,支持讀寫
def map3(): Unit ={ //不可變Map+var關(guān)鍵詞修飾例子 var a:scala.collection.mutable.Map[String,Int]=scala.collection.mutable.Map("k1"->1,"k2"->2)//初始化構(gòu)造函數(shù) a += ("k3"->3)//添加元素 a += ("k4"->4)//添加元素 a += ("k1"->100)//已經(jīng)存在添加元素會(huì)覆蓋 a += ("k1"->100,"k9"->9)//添加多個(gè)元素 a -= ("k2","k1")//刪除元素 a ++= List("CA" -> 23, "CO" -> 25)//追加集合 a --= List("AL", "AZ")//刪除集合 a.retain((k,v)=> k=="k1")//只保留等于k1元素,其他的刪除 a.put("put1",200)//put a.remove("k2")//remove a.clear()//清空 a("k3")=100//支持 println(a.contains("k6"))//是否包含某元素 println(a.size)//打印大小 println(a.get("k1").getOrElse("default")) //根據(jù)key讀取元素,不存在就替換成默認(rèn)值 a.foreach{case (e,i) => println(e,i)} //遍歷打印1 for( (k,v)<-a ) println(k,v) //遍歷打印2 println(a.isEmpty)//判斷是否為空 a.keys.foreach(println)//只打印key a.values.foreach(println)//只打印value a=scala.collection.mutable.Map()//引用能變 println(a.size) a.toSeq.sortBy(_._1)//排序 key a.toSeq.sortBy(_._2)//排序 value a.toSeq.sortWith(_._1>_._1) //降序排序 key a.toSeq.sortWith(_._2>_._2) //降序排序 value //下面自定義按英文字母或數(shù)字排序 implicit val KeyOrdering=new Ordering[String] { override def compare(x: String, y: String): Int = { x.compareTo(y) } } println(a.toSeq.sorted) }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用ElasticSearch6.0快速實(shí)現(xiàn)全文搜索功能的示例代碼
本篇文章主要介紹了使用ElasticSearch6.0快速實(shí)現(xiàn)全文搜索功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02Java中字符串String的+和+=及循環(huán)操作String原理詳解
Java編譯器在編譯時(shí)對(duì)String的+和+=操作會(huì)創(chuàng)建StringBuilder對(duì)象來進(jìn)行字符串的拼接,下面這篇文章主要給大家介紹了關(guān)于Java中字符串String的+和+=及循環(huán)操作String原理的相關(guān)資料,需要的朋友可以參考下2023-01-01部署springboot項(xiàng)目到云服務(wù)器的兩種方式(jar+war)
本文主要介紹了部署springboot項(xiàng)目到云服務(wù)器的兩種方式,主要介紹了jar和war兩種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12SpringBoot整合mybatisplus和druid的示例詳解
這篇文章主要介紹了SpringBoot整合mybatisplus和druid的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08Java反射之類的實(shí)例對(duì)象的三種表示方式總結(jié)
下面小編就為大家?guī)硪黄狫ava反射之類的實(shí)例對(duì)象的三種表示方式總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10Spring中的Eureka服務(wù)過期詳細(xì)解析
這篇文章主要介紹了Spring中的Eureka服務(wù)過期詳細(xì)解析,如果有一些服務(wù)過期了,或者宕機(jī)了,就不會(huì)調(diào)用shutdown()方法,也不會(huì)去發(fā)送請(qǐng)求下線服務(wù)實(shí)例,需要的朋友可以參考下2023-11-11