Convert Spark DataFrame to Map in Scala

brooke-lark-212309.jpg

테이블에서 각 나이별 Count를 구하는 상황이었다. val ageGroup = finalDf.groupBy("나이").count() 과 같이 각 나이가 몇 번 출현하는지 세는 것은 크게 문제가 없었지만, 사람이 어려봤자 0살, 늙어봤자 200살이니 굳이 이것을 데이터프레임으로 들고있기 보다는 Scala built-in Map으로 변환하고 싶었다.

하지만 ageGroup: org.apache.spark.sql.DataFrame = [나이: int, count: bigint]와 같이, 나이는 int, count는 bigint 타입으로 출력되어, 이것을 Seq로 만든뒤 List로 만드니 List[Any] 로 캐스팅 되는 것을 확인했다. Scala에서는 List에 타입이 섞일 수 없기 때문인가보다.


앞어 언급한 바와 같이, ageGroup.toSeq.toList로 맵핑하면 위에서 언급한 List[Any] 타입으로 나오는 것을 볼 수 있다.

여기서 곧바로 Map으로 변환하려고 하면, 맵의 타입을 지정할 수 없기 때문에 toMap을 부를 수 없다는 에러 메세지를 확인할 수 있다.

위와 같이 캐스팅을 해줘서 List[Any]를 (Int, Long) Tuple로 캐스팅하면!

정상적으로 Map으로 변환되는 것을 확인할 수 있다.

Leave a Reply