• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

解决scala.collection.mutable.Map写入的问题

java 搞代码 4年前 (2022-01-05) 23次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了解决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文件为数字和对应的人名

把RDD使用collect转化成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结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法。

(1)不可变Map

特点:

api不太丰富

如果是var修饰,引用可变,支持读写

如果是val修饰,引用不可变,只能写入一次值,其后只读

 var a:Map[String,Int]=Map("k1"->1,"k2"->2)//初始化构造函数 a += ("k3"->3)//添加元素 a += ("k4"->4)//添加元素 a += ("k1"->100)//已经存在添加元素会覆盖 a -= ("k2","k1")//删除元素 //    a("k1") = "foo"//不支持 println(a.contains("k6"))//是否包含某元素 println(a.size)//打印大小 println(a.get("k1").getOrElse("default")) //根据key读取元素,不存在就替换成默认值 a.foreach{case (e,i) => println(e,i)} //遍历打印1 for( (k,v)_._1) //降序排序 key a.toSeq.sortWith(_._2>_._2) //降序排序 value //下面自定义按英文字母或数字排序 implicit  val KeyOrdering=new Ordering[String] { override def compare(x: String, y: String): Int = { x.compareTo(y) } } println(a.toSeq.sorted)

(2)可变Map例子

特点:

api丰富与Java中Map基本类似

如果是var修饰,引用可变,支持读写

如果是val修饰,引用不可变,支持读写

 def map3(): Unit ={ //不可变Map+var关键词修饰例子 var a:scala.collection<strong style="color:transparent">来源gaodaima#com搞(代@码网</strong>.mutable.Map[String,Int]=scala.collection.mutable.Map("k1"->1,"k2"->2)//初始化构造函数 a += ("k3"->3)//添加元素 a += ("k4"->4)//添加元素 a += ("k1"->100)//已经存在添加元素会覆盖 a += ("k1"->100,"k9"->9)//添加多个元素 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")) //根据key读取元素,不存在就替换成默认值 a.foreach{case (e,i) => println(e,i)} //遍历打印1 for( (k,v)_._1) //降序排序 key a.toSeq.sortWith(_._2>_._2) //降序排序 value //下面自定义按英文字母或数字排序 implicit  val KeyOrdering=new Ordering[String] { override def compare(x: String, y: String): Int = { x.compareTo(y) } } println(a.toSeq.sorted) }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持gaodaima搞代码网

以上就是解决scala.collection.mutable.Map写入的问题的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:解决scala.collection.mutable.Map写入的问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址