虚列火花JDBC

我使用的查询,如下所示,以从MySQL获取数据:虚列火花JDBC

var df = spark.read.format("jdbc") 

.option("url", "jdbc:mysql://10.0.0.192:3306/retail_db")

.option("driver" ,"com.mysql.jdbc.Driver")

.option("user", "retail_dba")

.option("password", "cloudera")

.option("dbtable", "orders")

.option("partitionColumn", "order_id")

.option("lowerBound", "1")

.option("upperBound", "68883")

.option("numPartitions", "4")

.load()

问题是,我可以使用伪柱(像ROWNUM在Oracle或RRN(employeeno)在DB2)与option其中I指定partitionColumn

如果不是,我们可以指定一个不是主键的分区列吗?

回答:

根据spark的官方文档,partitionColumn可以是任何数字列(不一定是主键列)。

partitionColumn必须是相关表中的数字列。

参考:http://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases

回答:

我可以使用(在Oracle或RRN(为employeeno)在DB2像ROWNUM)是伪列

TL; DR大概没有。

虽然星火不考虑像PRIMARY KEYUNIQUE约束有非常重要要求为partitionColumn,这是不明确的文件中指出 - 它必须是确定性。

每个执行者使用单独的事务来获取它自己的一段数据。如果数字列不确定(稳定,在事务之间保留),Spark所看到的数据状态可能不一致,并且记录可能会被复制或跳过。

由于ROWNUM的实现通常是不稳定的(取决于非稳定排序,并且可能受索引等功能的影响),因此partitionColumn没有安全的选择。出于同样的原因,你不能使用随机数字。

我们可以指定一个分区列这不是一个主键

是的,只要它满足上述条件。

以上是 虚列火花JDBC 的全部内容, 来源链接: utcz.com/qa/259778.html

回到顶部