docker cp mysql-connector-j-8.0.32.jar spark-master:/spark/jar
dataframe.show()
를 사용해 출력하면 데이터 자리에 컬럼명이 들어간체 오는걸로 확인했습니다.MariaDB 조회 결과
Spark application 결과
+--------+
|nickname|
+--------+
|nickname|
|nickname|
|nickname|
+--------+
Maria db 에 연결 하고 테이블을 읽어오는 pyspark application 입니다.
from pyspark.sql import SparkSession
# 스파크 세션 생성
spark = SparkSession.builder \
.appName("MariaDB Connection Example") \
.getOrCreate()
url = 'jdbc:mysql://maria-db:3306/dbName'
## dataFram api 활용 db 접근 아이디 비밀번호는 개인환경에 맞춰서 작성
jdbcDF = spark.read \
.format("jdbc") \
.option("url", url) \
.option("user", "user") \
.option("password", "pw") \
.option("dbtable", "member") \
.load()
jdbcDF.show()
다음 코드는 외부 접근이 가능한 디비 유저, 비밀번호 를 입력하면됩니다.
외부 접근되는 계정이 아닌 root 를 사용할경우 경우에 따라 permission 애러나 발생할수 있습니다.
.option("user", "user") \
.option("password", "pw") \
작성후 saprk/app/
에 저장했습니다 각자 환경에 맞춰 저장하시면됩니다.
실행에 들어가기 앞서 만약 MariaDB 가 도커 컨테이너로 구성 되어있다면 spark클러스터와 같은 네트워크 에 구성되어 있는지 화인하셔야합니다.
연결이 안되 있다면 다음 명령어를 사용해 연결하세요
docker network connect 스파크_네트워크 MariaDB_컨테이너이름
./spark-submit --driver-class-path /usr/share/java/mysql-connector-8.0.32.jar --jars /usr/share/java/mysql-connector-8.0.32.jar ../app/pyspark/dbConnect.py
만약
출력시 UnicodeEncodeError: 'ascii' codec can't encode character 에러 발생 한다면
해결책 으로 다음 과 같이 환경변수를 추가하면됩니다
export PYTHONIOENCODING=utf8