Spark DataFrame RangePartitioner
Spark DataFrame RangePartitioner
[Spark 新手] 语言 - Scala
根据文档,RangePartitioner 将元素排序并划分为块,并将块分发到不同的机器。对于以下示例,它将如何工作。
假设我们有一个包含 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[= 的一个分区29=] 以及它如何将这两个分区发送(如果发送)到同一台机器进行处理。
关于 RangePartitioner
如何在内部工作的非常详细的解释 is described here
针对您的问题,RangePartitioner
在运行时 对 RDD 进行采样 ,收集统计信息,然后才评估范围(限制)。请注意,这里有 2 个参数 - 范围(逻辑)和分区(物理)。 partitions 的数量会受到很多因素的影响——输入文件的数量,从父 RDD 继承的数量,'spark.sql.shuffle.partitions' 在洗牌的情况下,等等。 ranges 根据抽样评估。在任何情况下,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 上的范围相匹配。
[Spark 新手] 语言 - Scala
根据文档,RangePartitioner 将元素排序并划分为块,并将块分发到不同的机器。对于以下示例,它将如何工作。
假设我们有一个包含 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[= 的一个分区29=] 以及它如何将这两个分区发送(如果发送)到同一台机器进行处理。
关于 RangePartitioner
如何在内部工作的非常详细的解释 is described here
针对您的问题,RangePartitioner
在运行时 对 RDD 进行采样 ,收集统计信息,然后才评估范围(限制)。请注意,这里有 2 个参数 - 范围(逻辑)和分区(物理)。 partitions 的数量会受到很多因素的影响——输入文件的数量,从父 RDD 继承的数量,'spark.sql.shuffle.partitions' 在洗牌的情况下,等等。 ranges 根据抽样评估。在任何情况下,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 上的范围相匹配。