我正在阅读spark.sql.execution.datasources.jdbc.JDBCRelation
的源代码。
以下是源代码中的注释。
在给定分区示意图(整型列、多个分区以及列值的上下限)的情况下,为每个分区生成
子句,以便表中的每一行只出现一次。
我的问题是:
发布于 2018-06-26 08:58:57
注释是脱离上下文的,您应该指出注释在代码中的位置,但我猜测spark的JDBC连接器需要将关系表拆分到多个分区中,以便创建分布式RDD,因此需要对其进行分区。要将表拆分为多个部分,需要创建具有多个WHERE子句的多个数据切片,但每条记录只能转到一个分区,以避免创建重复项。
例如,如果您有一张表
table tbl
---------
letter | number
a |1
b |2
a |3
c |4
您可以使用WHERE number <3
和WHERE number >=3
将其拆分为两个部分,但如果您使用WHERE number <=3
和WHERE number >=3
,您最终会得到两个分区中使用的一条记录。所以你不需要在源表中有唯一的行,注释适用于spark如何分割关系,当它这样做时,它必须确保每条记录只到一个分区。
https://stackoverflow.com/questions/51033465
复制相似问题