0
           jdbc(String url,
                     String table,
                     String columnName,
                     long lowerBound,
                     long upperBound,
                     int numPartitions,
                     java.util.Properties connectionProperties)

您好,我想使用 spark jdbc 连接将几个表从 Oracle 导入 hdfs。为了确保并行性,我想为每个表选择正确的上限。我计划将 row_number 作为我的分区列,并将表的计数作为上限。有没有更好的方法来选择upperBound?,因为我必须在第一时间连接到表才能获得计数。请帮忙

4

1 回答 1

0

通常在 Spark JDBC 中使用分区的更好方法:

  • 选择数字或日期类型列。
  • 将上界设置为 col 的最大值
  • 将下限设置为 col 的最小值

(如果有歪斜,那么还有其他方法可以处理,一般来说这很好)

显然以上需要一些查询和处理

  • 保留表的映射:分区列(可能是外部存储)
  • 查询并获取最小值、最大值

跳过查询的另一个提示:如果您可以找到基于日期的列,您可能可以使用upper = today's dateand lower = 2000's date。但它再次受制于您的内容。这些值可能不成立。

根据您的问题,我相信您正在寻找可以轻松应用于所有表格的通用内容。我知道这是所需的状态,但它就像row_number在 DB 中使用一样直接,Spark 默认情况下已经这样做了。

这些功能在技术上可能有效,但肯定会比上述步骤慢,并且会给您的数据库带来额外的负载。

于 2021-07-08T20:12:29.130 回答