Spark和公共分区器:由同一个键分区的两个独立引用在连接时只加载它们的公共分区吗



法国城市数据(会计、企业、工作…(可以方便地按部门(29=Finistère33=Gironde等…(进行分区,在我的数据集中,该字段被命名为codeDepartement

我有很多关于这些城市的企业、会计、税务等方面的参考资料,它们在这些部门分区内按codeCommune排序:
enterprises = enterprises.repartition(col("codeDepartement")).sortWithinPartition("codeCommune")


然后,我想加入他们进行分析的时候到了:

  • 我有主控local[12]配置。

  • 我想研究Finistère的城市。这意味着Apache Spark将加载镶木地板文件的citiescities_part_29以创建内部RDDcities_rdd_29或类似的东西,我认为它确实如此。


但是,当连接步骤开始时,即使连接条件为:
enterprises.col("codeCommune") = cities.col("codeCommune")
,是否足以确保Spark仅从enterprisesenterprises_part_29创建内部企业RDDenterprises_rdd_29,而不会尝试在其他条件之间进行搜索?

  1. 或者这还不够,我应该为联接条件添加:enterprises.col("codeDepartement") = cities.col("codeDepartement")

  2. 或者,这还不够吗?我应该有一个更明确的公共分区器,它将链接这两个数据集,
    然后,如何为数据集创建这样的分区器?

  3. 我在误导别人,我又错过了什么?

由同一个键分区的两个独立引用在连接时只加载它们的公共分区吗?

由联接键分区的两个数据帧将加载到允许本地联接的相同分区中。然而,看起来您已经被除联接列之外的其他列进行了分区,因此将出现shuffle。为了避免这种情况,请在加入之前通过联接键对输入数据集进行重新分区。例如

enterprises = enterprises.repartition(col("codeCommune"))
cities = cities.repartition(col("codeCommune"))
enterprises.join(cities, col("codeCommune"))

相关内容

  • 没有找到相关文章

最新更新