尝试从Spark(-shell)访问PostgreSQL

我整理了一下使用Spark的交互式Shell Spark-shell访问PostgreSQL并进行一些试验的步骤,作为备忘录。

下面是执行环境。需要注意的是,省略了PostgreSQL的安装和设置步骤。

CentOS 7.5、PostgreSQL 9.2.23、Apache Spark 2.3.1

Apache Spark (中文名称为”火花”)

使用开源框架,在内存中从不同的数据存储(Hadoop/Cassandra/RDB)中提取、处理和传递数据

安装Apache Spark

请参考此处进行Java环境的安装。

yum search openjdk
yum install java-1.8.0-openjdk
yum install java-1.8.0-openjdk-devel

安装Apache Spark

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
Spark.JPG

在中文中本地化以下内容,仅提供一种选择:
安装JDBC驱动程序

yum -y install postgresql-jdbc
find / -name postgre*.jar

从Spark Shell连接到PostgreSQL。

启动交互式Shell并指定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()
Scala_1.JPG

将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()
Scala_2.JPG

Spark-shell的结束

scala>Press (Ctrl+D)
bannerAds