如何解决Spark 和公共分区器:由同一键分区的两个单独的引用是否仅在连接时加载它们的公共分区?
法国城市数据(会计、企业、工作...)可以方便地按部门(29=Finistère
、33=Gironde
等...)进行分区,在我的数据集中,这个字段被命名为 { {1}}。
我有很多这些城市的企业、会计、税务等参考资料,它们在这些部门分区内按codeDepartement
排序:codeCommune
那么,到了我想加入他们进行分析的时候了:
-
我有
enterprises = enterprises.repartition(col("codeDepartement")).sortWithinPartition("codeCommune")
的 master 配置。 -
我想研究菲尼斯泰尔的城市。这意味着 Apache Spark 将加载 parquet 文件的
local[12]
以创建内部 RDDcities\cities_part_29
或类似的东西,我认为它确实如此。
但是当连接步骤开始时,即使连接条件是这样的:cities_rdd_29
是否足以确保 Spark 将只创建来自 enterprises.col("codeCommune") = cities.col("codeCommune")
的内部企业 RDD enterprises_rdd_29
并赢得'不尝试在其他人中搜索?
-
或者这还不够,我应该为连接条件添加:
enterprises\enterprises_part_29
? -
我在误导,我还遗漏了什么?
解决方法
由同一个键分区的两个单独的引用是否只会在连接时加载它们的公共分区?
由连接键分区的两个数据帧将被加载到允许本地连接的相同分区中。但是,看起来您已按 join 列以外的列进行分区,因此会出现 shuffle。为避免这种情况,请在加入之前通过加入键重新分区您的输入数据集。例如
enterprises = enterprises.repartition(col("codeCommune"))
cities = cities.repartition(col("codeCommune"))
enterprises.join(cities,col("codeCommune"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。