Spark (-shell)에서 PostgreSQL에 액세스하려고합니다.

Spark의 대화식 쉘 Spark-shell에서 PostgreSQL에 액세스하여 조금 만져 보는 절차를 각서적으로 정리했습니다.

실행 환경은 다음과 같습니다. 덧붙여 PostgreSQL의 인스톨, Setup 순서는 생략하고 있습니다.

· CentOS 7.5
· PostgreSQL 9.2.23
· 아파치 스파크 2.3.1

아파치 스파크



각종 데이터스토어(Hadoop/Cassandra/RDB)로부터의 데이터의 꺼내, 가공, 인도를 인메모리로 실시하는 OSS의 프레임워크

Apache Spark 설치



여기 를 참고로, Java 환경의 인스톨
yum search openjdk
yum install java-1.8.0-openjdk
yum install java-1.8.0-openjdk-devel

Apache Spark의 Install
wget http://ftp.jaist.ac.jp/pub/apache/spark/spark-2.3.1/spark-2.3.1-bin-hadoop2.7.tgz 
tar zxvf spark-1.6.1-bin-hadoop2.6.tgz -C /usr/local/lib/

ln -s /usr/local/lib/spark-2.3.1-bin-hadoop2.7 /usr/local/lib/spark

환경 변수 설정 및 Spark-shell 시작 확인
vi /etc/profile.d/spark.sh
export SPARK_HOME=/usr/local/lib/spark
export PATH=$SPARK_HOME/bin:$PATH

source /etc/profile
spark-shell --version



JDBC 드라이버 설치
yum -y install postgresql-jdbc
find / -name postgre*.jar

spark-shell에서 PostgreSQL에 액세스



대화식 쉘 시작 및 CLASSPATH 지정
spark-shell --driver-class-path=/usr/share/java/postgresql-jdbc.jar 

예) PostgreSQL mydb public.account 테이블의 데이터 로드
val jdbcDF = spark.read.format("jdbc").option("url", "jdbc:postgresql://localhost:5432/mydb").option("dbtable", "public.account").option("user", "postgres").load()
jdbcDF.filter(jdbcDF("id")<10).show()



예) public.account 테이블의 데이터를 public.account_bk 테이블에 복사(추가)
val prop = new java.util.Properties
prop.setProperty("driver", "org.postgresql.Driver")
prop.setProperty("user", "postgres")
prop.setProperty("password", "postgres") 
jdbcDF.write.mode("append").jdbc("jdbc:postgresql://localhost:5432/mydb", "public.account_bk", prop)

val jdbcDF1 = spark.read.format("jdbc").option("url", "jdbc:postgresql://localhost:5432/mydb").option("dbtable", "public.account_bk").option("user", "postgres").load()
jdbcDF1.show()

public.account 테이블의 데이터가 public.account_bk 테이블에 복제됨


Spark-shell 종료


scala>Press (Ctrl+D)

좋은 웹페이지 즐겨찾기