HashPartitioner如何在Spark中分发数据?

时间:2017-06-23 08:06:48

标签: apache-spark rdd partitioning

我想了解一下火花派对是如何运作的。

为了理解这一点,我在spark 1.6上有以下代码

def countByPartition1(rdd: RDD[(String, Int)]) = {
    rdd.mapPartitions(iter => Iterator(iter.length))
}

def countByPartition2(rdd: RDD[String]) = {
    rdd.mapPartitions(iter => Iterator(iter.length))
}

// RDDs创建

val rdd1 = sc.parallelize(Array(("aa", 1), ("aa", 1), ("aa", 1), ("aa", 1)), 8)
countByPartition(rdd1).collect()
  
    

Array [Int] = Array(0,1,0,1,0,1,0,1)

  
val rdd2 = sc.parallelize(Array("aa", "aa", "aa", "aa"), 8)
countByPartition(rdd2).collect()
  
    

Array [Int] = Array(0,1,0,1,0,1,0,1)

  

在这两种情况下,数据均匀分布。 在上述观察的基础上,我确实有以下问题:

  1. 在rdd1的情况下,散列分区应该计算密钥的哈希码(在这种情况下是“aa”),所以所有记录都应该转到单个分区而不是统一分配?
  2. 在rdd2的情况下,没有键值对,所以散列分区是如何工作的,即计算哈希码的关键是什么?
  3. 我已经关注了@ zero323,但没有得到答案。 How does HashPartitioner work?

0 个答案:

没有答案