使用从 rdbms 数据库到 Spark 的连接加载数据的方法应该是什么



我是Spark 2.4的新手,并试图找出将数据从GreenPlum/PostgreSQL引入Spark的最佳方法。

是使用联接查询从 RDBMS 加载数据更好,还是使用按数据库列分区单独加载表,然后进行 Spark 联接更好?

跨多个大表连接的本机查询适用于以下代码,但不确定它是否是一种正确的方法,也不确定我们如何提供分区。

val jdbcDF = spark.read.format("jdbc")
.option("url", "jdbc:postgresql://localhost:5432/test")
.option("user", "user1")
.option("password", "password1")
.option("query", "select a.*, b.* from a join on b a.user_id = b.user_id)
//not sure what should go here for query with multiple joins.
//.option("partitionColumn", "*")

我想最快的选择是首先将数据从RDBMS并行加载到集群存储:例如HDFS或S3。您将以类似于当前 load 语句的方式执行此操作,但您将首先使用属性partitionColumn, lowerBound, upperBound为表定义分区(请参阅 https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html(。一般来说,这是非常快的。唯一的缺点是您需要一个在最佳情况下具有平均分布值的数字列:自动递增 id 或时间戳通常非常好。

如果使用 Spark 等可扩展引擎执行,则在非常大的表上进行计算繁重的操作通常会更快。

最新更新