应该使用从rdbms数据库到Spark的联接来加载数据的方法

问题描述 投票:1回答:1

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

是使用联接查询从RDBMS加载数据还是使用DB DB分区逐个加载表,然后进行火花联接?

具有跨多个巨大表的联接的本机查询可与以下代码一起使用,但不确定这是否正确,也不确定如何分配分区。

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", "*")
scala apache-spark apache-spark-sql rdbms
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.