Spark DataFrame을 MySQL에 저장하는 방법

Spark에서 MySQL에 접근하고 DataFrame을 read, write 하는 방법에 대해 정리해보았습니다. 참고로 저는 Spark 2.1.0 버전을 사용 중 입니다.

MySQL JDBC Driver

JDBC를 통해 접근하기 때문에 드라이버가 필요합니다. 만일 SBT를 사용하신다면, build.sbt에 maven의 mysql-connector-java 를 추가하시면 됩니다.

직접 jar 파일을 사용해야하는 상황이라면, 다음 링크를 통해 다운받으시면 됩니다. https://dev.mysql.com/downloads/connector/j/

그리고 받으신 jar 파일을 -jars 옵션으로 추가해주셔야 합니다.

–jars /home/example/jars/mysql-connector-java-5.1.26.jar

마지막으로 spark-submit 을 사용하신다면, –packages 옵션을 추가해주시면 됩니다.

--packages mysql:mysql-connector-java:5.1.39

Spark DataFrame MySQL

Spark의 DataFrame은 read, write 함수를 통해 쉽게 데이터를 가져오거나 저장할 수 있습니다. 아래 예시는 Scala 언어로 작성했습니다.

import org.apache.spark.sql.SaveMode
import java.util.Properties

val tempDF = List(("1", "2017-06-01", "2017-06-03")).toDF("id", "start", "end")
val properties = new Properties()
properties.put("user", "userId")
properties.put("password", "password")
tempDF.write.mode(SaveMode.Append).jdbc("jdbc:mysql://url/database", "table", properties)

위 예제에서는 Properties를 통해 설정값을 넣어주었습니다. 유저 정보나 주소는 맞게 변경해주시면 됩니다.

mode 라는 것이 있는데 SaveMode.Append는 기존의 테이블에 추가하는 방식이고 SaveMode.Overwrite의 경우 기존의 테이블을 새로운 데이터로 대체하는 방식입니다.