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

What should be an approach for loading data using joins from rdbms database to spark

我是 Spark 2.4 的新手,正在尝试找出将数据从 GreenPlum/PostgreSQL 导入 Spark 的最佳方法。

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

跨多个大表进行联接的本机查询可使用以下代码,但不确定它是否是正确的方法,也不确定我们如何提供分区。

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。您将以类似于当前加载语句的方式执行此操作,但您将首先使用属性 partitionColumn, lowerBound, upperBound(请参阅 https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html)为 table 定义分区。这在一般情况下非常快。唯一的缺点是您需要一个在最佳情况下具有均匀分布值的数字列:自动递增 ID 或时间戳通常非常好。

如果使用 spark 等可扩展引擎执行,对真正巨大的 table 进行的计算量大的操作通常会更快。