Apache spark Spark数据帧范围分割器

Apache spark Spark数据帧范围分割器,apache-spark,apache-spark-sql,apache-spark-dataset,Apache Spark,Apache Spark Sql,Apache Spark Dataset,[新火花]语言-Scala 根据文档,RangePartitioner将元素排序并划分为块,并将块分发到不同的机器。对于下面的示例,它将如何工作 假设我们有一个数据帧,它有两列,一列(比如“a”)的连续值从1到1000。有另一个数据帧具有相同的模式,但对应的列只有4个值30、250、500、900。(可以是任意值,从1到1000中随机选择) 如果我使用RangePartitioner对两者进行分区 df_a.partitionByRange($"A") df_b.partitionByRange

[新火花]语言-Scala

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

假设我们有一个数据帧,它有两列,一列(比如“a”)的连续值从1到1000。有另一个数据帧具有相同的模式,但对应的列只有4个值30、250、500、900。(可以是任意值,从1到1000中随机选择)

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

df_a.partitionByRange($"A")
df_b.partitionByRange($"A")
来自两个数据帧的数据将如何分布在节点上

假设分区的数量是5

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


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

非常详细地解释了
RangePartitioner
如何在内部工作

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

来自两个数据帧的数据将如何分布在节点上?Spark如何将df_a的一个分区映射到df_b的一个分区


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

partitionByRange是否仅适用于scala?我无法在中找到此方法pyspark@vikrantrana在2.4中新增