Spark JDBC 上限

问题描述

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

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

解决方法

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

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

(如果有偏斜,还有其他处理方法,一般这样就好)

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

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

另一个跳过查询的技巧:如果你能找到一个基于日期的列,你可能可以使用 upper = today's date 和lower = 2000's date。但它又取决于您的内容。这些值可能不成立。

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...