공부기록
scala2 tuple2를 사용할 때 Seq.map과 Map.map의 차이점 본문
Seq.map을 하면 중복 원소가 남는다.
Map.map을 하면 key에 대한 중복원소가 제거된다.
아래 코드를 보라
def test3(): Unit = { val res = Seq(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .groupBy(_ % 3) .flatMap { case (_, v) => Some("key", v.max) } println(res) }
이 코드에 대한 결과는?
- [("key", 10), ("key", 8), ("key", 9)]
- [("key", 9)]
답은 2이다.
- 1번은 flatMap이
Seq
로써 동작할 때 결과이다. - 2번은 flatMap이
Map
로써 동작할 때 결과이다.
- 1번은 flatMap이
groupBy를 수행하면 Map이 리턴되고, flatMap은 Map으로써 동작한다.
1번의 결과를 바란다면 groupBy이후 toSeq를 반드시 넣어야 하며 그래야 flatMap이
Seq
로써 동작하게 된다.이를 1번으로 헷갈리고 코딩을 한다면 key 중복이 발생할 때 다른 값으로 덮어쓰여져 데이터 누락이 발생할 수 있다.
문제가 되는 데이터 외에 주변의 데이터까지 다 뜯어서 넣었다면 재연되었을 것이다.
다음부터는 데이터 문제 재연이 안되면 주변의 데이터를 뜯어서 넣어보자.
하지만
Map.map
임에도 Seq로써 동작할 수 있는 경우가 있다. 바로 하나의 값만 리턴하는 경우이다.아래 코드는 그 예시이다.
def test4(): Unit = { val res = Seq(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .groupBy(_ % 3) .map { case (_, v) => v.max } println(res) }
'일단써' 카테고리의 다른 글
스파크에 파이썬 프로젝트 서브밋하기 (0) | 2023.04.21 |
---|---|
feature 브랜치 develop에 머지후 revert 한 뒤 수정사항 다시 적용하는 방법 (0) | 2023.03.02 |
K8S에 MySQL 띄우기 (0) | 2022.10.22 |
코틀린에서 스프링 커스텀 예외는 Exception 을 상속하자 (0) | 2022.07.15 |
logback log level 설정 (0) | 2022.06.19 |