All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.datastax.spark.connector.rdd.partitioner.Murmur3PartitionerTokenRangeSplitter.scala Maven / Gradle / Ivy

There is a newer version: 3.0.0-alpha2
Show newest version
package com.datastax.spark.connector.rdd.partitioner

import com.datastax.spark.connector.rdd.partitioner.dht.LongToken

/** Fast token range splitter assuming that data are spread out evenly in the whole range. */
private[partitioner] class Murmur3PartitionerTokenRangeSplitter
  extends TokenRangeSplitter[Long, LongToken] {

  private type TokenRange = com.datastax.spark.connector.rdd.partitioner.dht.TokenRange[Long, LongToken]

  override def split(tokenRange: TokenRange, splitSize: Int): Seq[TokenRange] = {
    val rangeSize = tokenRange.rangeSize
    val splitPointsCount = if (rangeSize < splitSize) rangeSize.toInt else splitSize
    val splitPoints = (0 until splitPointsCount).map({ i =>
      new LongToken(tokenRange.start.value + (rangeSize * i / splitPointsCount).toLong)
    }) :+ tokenRange.end

    for (Seq(left, right) <- splitPoints.sliding(2).toSeq) yield
      new TokenRange(left, right, tokenRange.replicas, tokenRange.tokenFactory)
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy