为什么每一行都必须是唯一的?

时间:2018-06-26 00:44:19

标签: apache-spark jdbc apache-spark-sql

我正在阅读spark.sql.execution.datasources.jdbc.JDBCRelation的源代码。

这是源代码中的注释。

  

给出一个分区示意图(整数列,一个   分区的数量,以及列的上限和下限   值),为每个分区生成WHERE子句,以便每个   表中的行仅出现一次。

我的问题:

  1. 为什么每一行都必须是唯一的?
  2. 有什么例子吗?动机是什么?
  3. 如果有重复该怎么办?

1 个答案:

答案 0 :(得分:2)

注释不在上下文中,您应该指向注释在代码中的位置,但是我的猜测是,用于spark的JDBC连接器需要将关系表拆分为多个分区才能创建RDD,这是分布式,因此需要分区。 若要将表拆分为多个部分,需要使用多个WHERE子句创建多个数据片段,但是每条记录只能进入一个分区,以免创建重复项。

例如,如果您有一张桌子

table tbl
---------
letter | number
a      |1 
b      |2 
a      |3
c      |4 

您可以使用WHERE number <3WHERE number >=3进行拆分 将其分为两部分,但是如果您使用WHERE number <=3WHERE number >=3 最后在两个分区中使用一条记录。因此,您不需要在源表中具有唯一的行,该注释适用于spark如何拆分关系,当这样做时,必须确保每条记录仅进入一个分区。