Sparkの対話式シェル Spark-shellからPostgreSQLにアクセスして少し触ってみる手順を、覚書的に纏めました。
実行環境は次の通りです。なお、PostgreSQLのインストール、Setup手順は省略しています。
・CentOS 7.5
・PostgreSQL 9.2.23
・Apache Spark 2.3.1
#Apache Spark
各種データストア(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)