Pyspark+Docker를 사용하여 PostgreSQL에 연결하는 방법

배경.
Pyspark를 로컬로 구축하는 것은 번거롭기 때문에 Docker image를 사용합니다
Pyspark를 사용하여 회사 내부의 DB(Amazon RDS for PostgreSQL)를 연결할 때 JDBC 드라이브를 식별해야 합니다.
인터넷에 docker, pspark,postgreSQL의 총 3개의 통일된 정보가 없기 때문에 총괄!!
규격.
OS
MacOS Catalina version:10.15.7
Docker
Jupyter에서 제공하는 "jupyter/pspark-notebook"을 활용
Pyspark/Hadoop version
spark_version = 3.1.2
hadoop_version = 3.2
※ Gtihub Docker file을 통해 확인
https://github.com/jupyter/docker-stacks/blob/master/pyspark-notebook/Dockerfile
PostgreSQL
사내 DB는 PostgreSQL 활용
PostgreSQL = 11.6
단계 + 소스 코드
1. Postgre의 JBDC 드라이버 Install
다음 웹 사이트에서 JDBC 드라이브 다운로드
이번에 "PostgreSQL JDBC 42.2.3"을 이용해서...
2. JDBC 드라이버를 적당한 곳에 배치
이번에 GUI를 기반으로 Desktop 구성
3. 터미널 부팅
부팅 단말기
3. Docker 이미지 제작
docker image docker pull jupyter/pyspark-notebook
4. Docker image 확인
GUI 기반 확인 방법
①: Docker 응용 프로그램 시작
②: Containers/Apps 클릭
③: 다음 화면에 "Pyspark"컨테이너가 있는지 확인

CUI 기반 확인 방법
1. 터미널 시작
2. 다음 명령에 따라 집행
docker ps -a
3. 아래 화면에 "Pyspark"용기가 있는지 확인

6. 컨테이너 가동
GUI 기반 시작 방법
부팅하려는 컨테이너에 커서를 놓으면 START 버튼이 나타나고 START 버튼을 클릭합니다

CUI 기반 시작 방법(권장)
터미널에서 다음 명령 중 하나를 실행합니다
docker run \ 
-e GRANT_SUDO=yes \
--name pyspark \ 
-it \ 
-p 8888:8888 \
-e JUPYTER_ENABLE_LAB=yes \
--user root \
-v $PWD:/home/jovyan/work jupyter/pyspark-notebook

7. Jupter 환경에 들어가기
GUI 기본 Jupter를 추가하는 방법
이전 단계에서 "START"단추를 누르면 용기의 이름을 누르면 로그를 출력합니다
이 중에는 "http:/~"에서 시작하는 URL이 있는데, 복사해서 브라우저에 붙이면 Jupyter 화면으로 변환됩니다

CUI 베이스에 Jupter 들어가는 방법.
이전 섹션의 "docker run"실행 후 로그 출력
이 중에는 "http:/~"에서 시작하는 URL이 있는데, 복사해서 브라우저에 붙이면 Jupyter 화면으로 변환됩니다
※ 주의
Jupyter 환경으로 이동할 때 토큰이 필요합니다.
"/lab"뒤에 "token=~~"를 추가하면 환경에 복제할 수 있습니다
8. Jupter에서의 작업
1. 서류 제작
임의의 곳에서.ipynb 파일 만들기
※ 제작된 서류에 실행
2. JDBC 드라이버 파일을 docker pspark로 이동
①: 현재 부하 확인
%pwd
②: 다운로드한 드라이버 아래로 이동

%cd ~
%cd '/home/jovyan/work/Desktop'

③: 복사 명령을 이용하여 드라이버를 "spark -3.1.2-bin-hadoop3.2/jars"아래에 저장
!sudo cp postgresql-42.2.23.jar '/usr/local/spark-3.1.2-bin-hadoop3.2/jars/'
④: 연결 여부 확인
#必要なライブラリをインポート
import pyspark
from pyspark.sql import SparkSession
from pyspark.sql.functions import *

##sparkインスタンスを立ち上げる
##configでjarsを設定
spark = SparkSession \
  .builder \
  .appName("test") \
  .config("spark.jars", "postgresql-42.2.23.jar") \
  .getOrCreate()
print(spark)

##接続を行いデータフレームに格納
##尚 "****"の箇所である URL/user/DB.table(schema.table)は自身の情報を入力
df = spark.read \
  .format("jdbc") \
  .option("url", "jdbc:postgresql://URL:port番号/DB名") \
  .option("user", "*****") \
  .option("dbtable", "****.****") \
  .option("password", "*****") \
  .option("driver", "org.postgresql.Driver") \
  .load()

###変数の呼び出し及び出力確認
##スキーマを確認
df.printSchema()
##先頭20行を出力
df.show(20)
회고
환경 구축에 많은 시간이 걸렸다.
3개를 망라했는데 인터넷에 내용이 거의 없어요.
무사히 연결할 수 있어서 좋아요!웃다 웃다
pspark의 기존 인상을 활용했지만 JDBCdriver에 가입하지 않은 경우도 있다
앞으로 dockerfile을 직접 만들어서 맞춤형으로 만들지 않았으면 좋겠습니다.
DB 연결에는 문제가 없지만, 데이터의 가공과 통계를 하는 데 더해 오류로 좌절한 부분도 있는데 앞으로 기회가 된다면 총결산하고 싶다.
ex) 메모리 오류나 출력의 상한 오류 등
참고 자료
・ 공식 참조
https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql.html
· Spark SQL 스크롤 레일
http://mogile.web.fc2.com/spark/sql-data-sources-jdbc.html
・Using PySpark to connect to PostgreSQL locally
https://mmuratarat.github.io/2020-06-18/pyspark-postgresql-locally

좋은 웹페이지 즐겨찾기