without haste but without rest

IntelliJ에서 Scala로 Spark 프로젝트 시작하기 본문

Data Engineering & DataOps/Spark

IntelliJ에서 Scala로 Spark 프로젝트 시작하기

JinungKim 2022. 2. 18. 15:58

환경

  • MacOS: Monterey 12.1
  • IntelliJ: 2021.03.01
  • Java: 8
  • sbt: 1.6.0
  • Scala: 2.12.0
  • Spark: 3.1.2

1. Intellij 플러그인에서 스칼라 설치

scala 플러그인을 설치한다.

(맥 os 기준으로 인텔리제이에서 쉬프트를 두번 누르면 검색 탭이 나타나는데 plugins를 검색해서 진입할 수도 있다. )


2. 스칼라 프로젝트 생성

구글링 해보니 메이븐으로 생성하기도 하던데 스칼라 공식 도큐먼트에서는 sbt 기준으로 설명을 해서 sbt로 진행했다. 

 

 

sbt란 무엇인가?

 

sbt (software) - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Open-source build tool for Scala and Java projects sbt is an open-source build tool for Scala and Java projects, similar to Apache's Maven and Ant. Its main features are: Native suppor

en.wikipedia.org

 

 

sbt: 1.6.0

scala: 2.12.0

java:8

spark: 3.1.2


3. Saprk dependency 설정

build.sbt 파일에 디펜던시를 추가 해준다. 값을 변경하게 되면 경우 우측 상단에 파란색 화살표 모양으로 리로드 버튼이 활성화 되는데, 클릭해서 리로드 한다. (?... spark-core 디펜던시 라인에 띄어쓰기 하나가 잘못 들어갔는데, 실행이 잘 됐다.)

 

초기값은 lazy val ... 등의 변수가 디폴트 값인데 스파크 데모를 위함이므로 우선 날리고 설정해주자.

// build.sbt

name := "spark-demo"
version := "0.1"
scalaVersion := "2.12.10"
val sparkVersion = "3.1.2"

libraryDependencies += "org.apache.spark" %% "spark-core" %sparkVersion
libraryDependencies += "org.apache.spark" %% "spark-sql" %sparkVersion

4. Spark demo 

src/main/scala/SparkDemo.scala

SparkDemo 오브젝트 파일을 하나 생성하고 테스트 코드를 작성한다. 

 

1. Spark 세션을 생성

2. range 메서드를 사용해서 DataFrame을 생성

3. DataFrame 출력

 

// SparkDemo.scala

import org.apache.spark.sql.SparkSession

object SparkDemo extends App{

  val spark = SparkSession.builder()
    .appName("spark-demo")
    .master("local[*]")
    .getOrCreate()

  val myRange = spark.range(10)

  myRange.show()
}

 

빌드 한다. (^ + shift + R )

 

 

스파크를 이용해서 데이터프레임 생성 성공.


스파크 프로젝트, 학습을 위한 기본적인 설정이 끝났다.  pyspark를 활용할 수도 있지만, 스파크의 고수준 API인 dataset의 정적 타입까지 활용하기 위해서 스파크의 네이티브 언어인 스칼라를 선택했다. 아마도 앞으로의 흐름은 점점 Flink로 넘어가는 듯 한데 플링크도 스칼라 기반의 프레임워크라 스칼라로 스파크를 배워두면 플링크로 넘어갈 때도 많은 도움이 될 듯 하다.

Comments