scala.collection.mutable.Map 에 기 록 된 문 제 를 해결 합 니 다.

scala 에 가 변 맵 쓰기
쓰다

val no2ID = scala.collection.mutable.Map[Int,String]()
no2ID += (1 -> "something")
다음 코드 에 서 는 맵 에 요 소 를 추가 할 수 없습니다.

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)불가 변 지도
특징:
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)<-a ) println(k,v) //    2
    println(a.isEmpty)//      
    a.keys.foreach(println)//   key
    a.values.foreach(println)//   value
    a=Map()//        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
    
    //               
    implicit  val KeyOrdering=new Ordering[String] {
      override def compare(x: String, y: String): Int = {
        x.compareTo(y)
      }
    }
    println(a.toSeq.sorted)
(2)가 변 지도 예
특징:
api 풍부 함 은 자바 맵 과 기본적으로 유사 합 니 다.
var 수식 이 라면 가 변 참조,읽 기와 쓰기 지원
val 수식 이 라면 인용 이 변 하지 않 고 읽 기와 쓰 기 를 지원 합 니 다.

def map3(): Unit ={
  //   Map+var       
  var a:scala.collection.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)<-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
  
      //               
  implicit  val KeyOrdering=new Ordering[String] {
    override def compare(x: String, y: String): Int = {
      x.compareTo(y)
    }
  }
  println(a.toSeq.sorted)
}
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기