首页 > 解决方案 > 如何为两个数据帧创建分区,而几个分区可以位于 Spark 上的同一实例/机器上?

问题描述

我们有两个 DataFrame:df_Adf_B

假设,两者都有大量的行。我们需要对它们进行分区。如何将他们划分为夫妻?

例如,分区号为 5:

如果我们有 5 台机器:

如果我们有 3 台机器:

注意:如果其中一个 DataFrame 足够小,我们可以使用广播技术

当两个(或两个以上)DataFrame 都足够大时该怎么办(如何分区)?

标签: apache-sparkparallel-processingbigdataaws-glue

解决方案


我认为我们需要退后一步。只看大尺寸方面,而不是广播。

Spark 是一个框架,它根据数据帧分区的协同定位为您的应用程序管理事物,考虑分配的资源与可用的资源和 Action 的类型,因此如果 Workers 需要获取分区进行处理。

repartitions 是Transformations。当Action, 如write:

peopleDF.select("name", "age").write.format("parquet").save("namesAndAges.parquet")

发生然后事情开始了。

  • 如果你有一个 JOIN,那么如果需要重新分区和移动,Spark 就会解决。
  • 也就是说,如果您join对两个 DF 都在 c1 上,那么重新分区很可能会发生在 c1 列上,因此 DF 中针对该 c1 列的出现被洗牌到相同的节点,其中有一个空闲的 Executor 驻留等待服务于 2 个或更多分区的 JOIN。
  • 这仅在调用 Action 时发生。这样,如果你做了不必要的 Transformation,Catalyst 就可以避免那些事情。
  • 此外,对于使用的分区数量,这是一个很好的链接恕我直言:spark.sql.shuffle.partitions of 200 default partitions conundrum

推荐阅读