我正在阅读spark.sql.execution.datasources.jdbc.JDBCRelation
的源代码。
这是源代码中的注释。
给出一个分区示意图(整数列,一个 分区的数量,以及列的上限和下限 值),为每个分区生成WHERE子句,以便每个 表中的行仅出现一次。
我的问题:
答案 0 :(得分:2)
注释不在上下文中,您应该指向注释在代码中的位置,但是我的猜测是,用于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如何拆分关系,当这样做时,必须确保每条记录仅进入一个分区。