gpt4 book ai didi

apache-spark - Spark DataFrame RangePartitioner

转载 作者:行者123 更新时间:2023-12-04 05:28:10 26 4
gpt4 key购买 nike

[Spark 新手] 语言 - Scala

根据文档,RangePartitioner 将元素排序并划分为 block ,并将 block 分发到不同的机器。对于以下示例,它将如何工作。

假设我们有一个包含 2 列的数据框,其中一列(例如“A”)具有从 1 到 1000 的连续值。还有另一个数据框具有相同的架构,但对应的列只有 4 个值 30、250、500, 900.(这些可以是从 1 到 1000 中随机选择的任何值)

如果我使用 RangePartitioner 对两者进行分区,

df_a.partitionByRange($"A")
df_b.partitionByRange($"A")

来自两个数据帧的数据将如何跨节点分布?

假设分区数为5。

此外,如果我知道第二个 DataFrame 的值数量较少,那么减少它的分区数量会有什么不同吗?

我很难理解的是,Spark 如何将 df_a 的一个分区映射到 df_b 的一个分区,以及它如何将这两个分区发送(如果有)到同机加工。

最佳答案

关于 RangePartitioner 如何在内部工作的非常详细的解释 is described here

针对您的问题,RangePartitioner 在运行时 对 RDD 进行采样,收集统计数据,然后才评估范围(限制)。请注意,这里有 2 个参数 - 范围(逻辑)和分区(物理)。 partitions 的数量会受到许多因素的影响——输入文件的数量、从父 RDD 继承的数量、混洗情况下的“spark.sql.shuffle.partitions”等。范围 根据抽样评价。在任何情况下,RangePartitioner 确保每个范围都包含在单个分区中。

how will the data from both the dataframes be distributed across nodes ? how Spark maps one partition of df_a to a partition of df_b

我假设你的意思是加入“A”和“B”,否则这个问题就没有任何意义。在这种情况下,Spark 将确保根据他们的统计数据将分区与两个 DataFrame 上的范围相匹配。

关于apache-spark - Spark DataFrame RangePartitioner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53010041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com