(1,1), (1,2), (1,3), (2,1), (2,2), (2,3)
new HashPartitoner(numPartitions) //What does numPartitions do?
new HashPartitoner(1)
new HashPartitoner(2)
new HashPartitoner(10)
那么HashPartitioner
实际上是如何工作的呢?
好吧,让我们让数据集稍微有趣一点:
val rdd = sc.parallelize(for {
x <- 1 to 3
y <- 1 to 2
} yield (x, None), 8)
我们有六个要素:
rdd.count
Long = 6
无分区程序:
rdd.partitioner
Option[org.apache.spark.Partitioner] = None
rdd.partitions.length
Int = 8
import org.apache.spark.rdd.RDD
def countByPartition(rdd: RDD[(Int, None.type)]) = {
rdd.mapPartitions(iter => Iterator(iter.length))
}
countByPartition(rdd).collect()
Array[Int] = Array(0, 1, 1, 1, 0, 1, 1, 1)
import org.apache.spark.HashPartitioner
val rddOneP = rdd.partitionBy(new HashPartitioner(1))
rddOneP.partitions.length
Int = 1
countByPartition(rddOneP).collect
Array[Int] = Array(6)
请注意,洗牌后的值顺序是不确定的。
如果我们使用HashPartitioner(2)
也是如此
val rddTwoP = rdd.partitionBy(new HashPartitioner(2))
我们将得到2个分区:
rddTwoP.partitions.length
Int = 2
countByPartition(rddTwoP).collect()
Array[Int] = Array(2, 4)
(1 to 3).map((k: Int) => (k, k.hashCode, k.hashCode % 2))
scala.collection.immutable.IndexedSeq[(Int, Int, Int)] = Vector((1,1,1), (2,2,0), (3,3,1))
rddTwoP.mapPartitions(iter => Iterator(iter.map(_._1).toSet)).collect()
Array[scala.collection.immutable.Set[Int]] = Array(Set(2), Set(1, 3))
val rddSevenP = rdd.partitionBy(new HashPartitioner(7))
rddSevenP.partitions.length
Int = 7
countByPartition(rddTenP).collect()
Array[Int] = Array(0, 2, 2, 2, 0, 0, 0)
在像这样的简单情况下,key是一个小整数,您可以假定hash
是一个标识(i=hash(i)
)。
Scala API使用nonnegativeMod
根据计算的哈希确定分区,
如果密钥分布不均匀,则可能会出现集群部分空闲的情况
哈希分区器既不是内射的,也不是满射的。可以将多个键分配给一个分区,有些分区可以保持为空。
请注意,当前基于哈希的方法在Scala中与REPL定义的case类(Apache Spark中的case类相等)结合时不起作用。
HashPartitioner
(或任何其他Partitioner
)洗牌数据。除非在多个操作之间重用分区,否则不会减少要洗牌的数据量。
应用程序具有上下文路径-->/spring-form-simple-project 因此,为了访问,我使用: 这个控制器又返回student.jsp,当提交这个student.jsp时,它用-->@RequestMapping(value=“/AddStudent”,method=RequestMethod.post)调用controller 任何关于这通常如何工作的指示都将是有帮助的。 谢谢!
本文向大家介绍hibernate 是如何工作的?相关面试题,主要包含被问及hibernate 是如何工作的?时的应答技巧和注意事项,需要的朋友参考一下 读取并解析配置文件。 读取并解析映射文件,创建 SessionFactory。 打开 Session。 创建事务。 进行持久化操作。 提交事务。 关闭 Session。 关闭 SessionFactory。
我很想知道谷歌应用商店服务中的Activity认可是如何工作的? 我认为活动是通过加速计数据识别的。是这样吗?。请告诉我详细情况如何
我对GridBagLayout这一主题不熟悉,我无法理解约束、重量和填充之间的确切区别。 我可以而不分配。 除非您指定了至少一个非零值,否则所有组件都会聚集在其容器的中心。这是因为当权重为0.0(默认值)时,GridBagLayout会在其单元格网格和容器边缘之间放置任何额外的空间。 我的问题是,如果这是真的,那么为什么组件之间没有空间,它们看起来是连接的?
从@mock和@injectmocks之间的差异,我理解@injectmocks被用作创建实例的注释,并将用@mock创建的mock注入其中。我想我不明白它是怎么工作的。 以下是我的问题: 在中,当我调用时,它返回一个空集...我的问题是:为什么不抛出(只声明mockedappoinceptions)?也许因为这是一个嘲弄?如果原因是这样,为什么模拟不抛出“NullPointerException
这可能是一个很难回答的问题。我才刚开始学Java 我不懂paintComponent方法的操作。我知道如果我想画一些东西,我必须重写paintComponent方法。