scala.math.Ordering Scala Examples
The following examples show how to use scala.math.Ordering.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: ArrayType.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.sql.types import scala.math.Ordering import org.json4s.JsonDSL._ import org.apache.spark.annotation.InterfaceStability import org.apache.spark.sql.catalyst.util.ArrayData override def defaultSize: Int = 100 * elementType.defaultSize override def simpleString: String = s"array<${elementType.simpleString}>" override def catalogString: String = s"array<${elementType.catalogString}>" override def sql: String = s"ARRAY<${elementType.sql}>" override private[spark] def asNullable: ArrayType = ArrayType(elementType.asNullable, containsNull = true) override private[spark] def existsRecursively(f: (DataType) => Boolean): Boolean = { f(this) || elementType.existsRecursively(f) } @transient private[sql] lazy val interpretedOrdering: Ordering[ArrayData] = new Ordering[ArrayData] { private[this] val elementOrdering: Ordering[Any] = elementType match { case dt: AtomicType => dt.ordering.asInstanceOf[Ordering[Any]] case a : ArrayType => a.interpretedOrdering.asInstanceOf[Ordering[Any]] case s: StructType => s.interpretedOrdering.asInstanceOf[Ordering[Any]] case other => throw new IllegalArgumentException(s"Type $other does not support ordered operations") } def compare(x: ArrayData, y: ArrayData): Int = { val leftArray = x val rightArray = y val minLength = scala.math.min(leftArray.numElements(), rightArray.numElements()) var i = 0 while (i < minLength) { val isNullLeft = leftArray.isNullAt(i) val isNullRight = rightArray.isNullAt(i) if (isNullLeft && isNullRight) { // Do nothing. } else if (isNullLeft) { return -1 } else if (isNullRight) { return 1 } else { val comp = elementOrdering.compare( leftArray.get(i, elementType), rightArray.get(i, elementType)) if (comp != 0) { return comp } } i += 1 } if (leftArray.numElements() < rightArray.numElements()) { return -1 } else if (leftArray.numElements() > rightArray.numElements()) { return 1 } else { return 0 } } } }
Example 2
Source File: ArrayType.scala From XSQL with Apache License 2.0 | 5 votes |
package org.apache.spark.sql.types import scala.math.Ordering import org.json4s.JsonDSL._ import org.apache.spark.annotation.InterfaceStability import org.apache.spark.sql.catalyst.util.ArrayData override def defaultSize: Int = 1 * elementType.defaultSize override def simpleString: String = s"array<${elementType.simpleString}>" override def catalogString: String = s"array<${elementType.catalogString}>" override def sql: String = s"ARRAY<${elementType.sql}>" override private[spark] def asNullable: ArrayType = ArrayType(elementType.asNullable, containsNull = true) override private[spark] def existsRecursively(f: (DataType) => Boolean): Boolean = { f(this) || elementType.existsRecursively(f) } @transient private[sql] lazy val interpretedOrdering: Ordering[ArrayData] = new Ordering[ArrayData] { private[this] val elementOrdering: Ordering[Any] = elementType match { case dt: AtomicType => dt.ordering.asInstanceOf[Ordering[Any]] case a : ArrayType => a.interpretedOrdering.asInstanceOf[Ordering[Any]] case s: StructType => s.interpretedOrdering.asInstanceOf[Ordering[Any]] case other => throw new IllegalArgumentException( s"Type ${other.catalogString} does not support ordered operations") } def compare(x: ArrayData, y: ArrayData): Int = { val leftArray = x val rightArray = y val minLength = scala.math.min(leftArray.numElements(), rightArray.numElements()) var i = 0 while (i < minLength) { val isNullLeft = leftArray.isNullAt(i) val isNullRight = rightArray.isNullAt(i) if (isNullLeft && isNullRight) { // Do nothing. } else if (isNullLeft) { return -1 } else if (isNullRight) { return 1 } else { val comp = elementOrdering.compare( leftArray.get(i, elementType), rightArray.get(i, elementType)) if (comp != 0) { return comp } } i += 1 } if (leftArray.numElements() < rightArray.numElements()) { return -1 } else if (leftArray.numElements() > rightArray.numElements()) { return 1 } else { return 0 } } } }
Example 3
Source File: Searching.scala From perf_tester with Apache License 2.0 | 5 votes |
package scala.collection import scala.language.implicitConversions import scala.math.Ordering import scala.collection.generic.IsSeqLike object Searching { sealed abstract class SearchResult { def insertionPoint: Int } case class Found(foundIndex: Int) extends SearchResult { override def insertionPoint = foundIndex } case class InsertionPoint(insertionPoint: Int) extends SearchResult @deprecated("Search methods are defined directly on SeqOps and do not require scala.collection.Searching any more", "2.13.0") class SearchImpl[Repr, A](private val coll: SeqOps[A, AnyConstr, _]) extends AnyVal @deprecated("Search methods are defined directly on SeqOps and do not require scala.collection.Searching any more", "2.13.0") implicit def search[Repr, A](coll: Repr)(implicit fr: IsSeqLike[Repr]): SearchImpl[Repr, fr.A] = new SearchImpl(fr.conversion(coll)) }
Example 4
Source File: package.scala From bitcoin-s with MIT License | 5 votes |
package org.bitcoins.core import scala.math.Ordering import scala.util.{Failure, Success, Try} // We extend AnyVal to avoid runtime allocation of new // objects. See the Scala documentation on value classes // and universal traits for more: // https://docs.scala-lang.org/overviews/core/value-classes.html package object currency { implicit class SatoshisLong(private val i: Long) extends AnyVal { def satoshis: Satoshis = Satoshis(i) def satoshi: Satoshis = satoshis def sats: Satoshis = satoshis def sat: Satoshis = satoshis } implicit val currencyUnitOrdering: Ordering[CurrencyUnit] = new Ordering[CurrencyUnit] { override def compare(x: CurrencyUnit, y: CurrencyUnit): Int = x.compare(y) } implicit val currencyUnitNumeric: Numeric[CurrencyUnit] = new Numeric[CurrencyUnit] { override def plus(x: CurrencyUnit, y: CurrencyUnit): CurrencyUnit = x + y override def minus(x: CurrencyUnit, y: CurrencyUnit): CurrencyUnit = x - y override def times(x: CurrencyUnit, y: CurrencyUnit): CurrencyUnit = x * y override def negate(x: CurrencyUnit): CurrencyUnit = -x override def fromInt(x: Int): CurrencyUnit = Satoshis(x.toLong) override def toInt(x: CurrencyUnit): Int = x.satoshis.toLong.toInt override def toLong(x: CurrencyUnit): Long = x.satoshis.toLong override def toFloat(x: CurrencyUnit): Float = x.satoshis.toBigInt.toFloat override def toDouble(x: CurrencyUnit): Double = x.satoshis.toBigInt.toDouble override def compare(x: CurrencyUnit, y: CurrencyUnit): Int = x.satoshis compare y.satoshis // Cannot use the override modifier because this method was added in scala version 2.13 def parseString(str: String): Option[CurrencyUnit] = { if (str.isEmpty) { None } else { Try(str.toLong) match { case Success(num) => Some(Satoshis(num)) case Failure(_) => None } } } } implicit val satoshisOrdering: Ordering[Satoshis] = new Ordering[Satoshis] { override def compare(x: Satoshis, y: Satoshis): Int = x.compare(y) } }
Example 5
Source File: BigIntegerOps.scala From sigmastate-interpreter with MIT License | 5 votes |
package sigmastate.eval import java.math.BigInteger import scalan.{ExactNumeric, ExactIntegral, ExactOrderingImpl} import scala.math.{LowPriorityOrderingImplicits, Integral, Ordering} import special.sigma._ import scalan.util.Extensions._ import sigmastate.eval.Extensions._ import sigmastate.eval.NumericOps.BigIntIsExactNumeric.n object OrderingOps extends LowPriorityOrderingImplicits { def apply[T](implicit ord: Ordering[T]) = ord trait BigIntegerOrdering extends Ordering[BigInteger] { def compare(x: BigInteger, y: BigInteger) = x.compareTo(y) } implicit object BigInteger extends BigIntegerOrdering trait BigIntOrdering extends Ordering[BigInt] { def compare(x: BigInt, y: BigInt) = x.compareTo(y) } implicit object BigInt extends BigIntOrdering } object NumericOps { trait BigIntegerIsIntegral extends Integral[BigInteger] { // private val BI = implicitly[Integral[BigInt]] def quot(x: BigInteger, y: BigInteger): BigInteger = x.divide(y) def rem(x: BigInteger, y: BigInteger): BigInteger = x.remainder(y) def plus(x: BigInteger, y: BigInteger): BigInteger = x.add(y) def minus(x: BigInteger, y: BigInteger): BigInteger = x.subtract(y) def times(x: BigInteger, y: BigInteger): BigInteger = x.multiply(y) def negate(x: BigInteger): BigInteger = x.negate() def fromInt(x: Int): BigInteger = BigInteger.valueOf(x) def toInt(x: BigInteger): Int = x.intValueExact() def toLong(x: BigInteger): Long = x.longValueExact() def toFloat(x: BigInteger): Float = x.floatValue() def toDouble(x: BigInteger): Double = x.doubleValue() } implicit object BigIntegerIsIntegral extends BigIntegerIsIntegral with OrderingOps.BigIntegerOrdering trait BigIntIsIntegral extends Integral[BigInt] { def quot(x: BigInt, y: BigInt): BigInt = x.divide(y) def rem(x: BigInt, y: BigInt): BigInt = x.remainder(y) def plus(x: BigInt, y: BigInt): BigInt = x.add(y) def minus(x: BigInt, y: BigInt): BigInt = x.subtract(y) def times(x: BigInt, y: BigInt): BigInt = x.multiply(y) def negate(x: BigInt): BigInt = x.negate() def fromInt(x: Int): BigInt = x.toBigInt def toInt(x: BigInt): Int = x.toInt def toLong(x: BigInt): Long = x.toLong def toFloat(x: BigInt): Float = CostingSigmaDslBuilder.toBigInteger(x).floatValue() def toDouble(x: BigInt): Double = CostingSigmaDslBuilder.toBigInteger(x).doubleValue() } implicit object BigIntIsIntegral extends BigIntIsIntegral with OrderingOps.BigIntOrdering implicit object BigIntIsExactNumeric extends ExactNumeric[BigInt] { val n = BigIntIsIntegral override def plus(x: BigInt, y: BigInt): BigInt = n.plus(x, y) override def minus(x: BigInt, y: BigInt): BigInt = n.minus(x, y) override def times(x: BigInt, y: BigInt): BigInt = n.times(x, y) } implicit object BigIntIsExactIntegral extends ExactIntegral[BigInt] { val n = BigIntIsIntegral override def plus(x: BigInt, y: BigInt): BigInt = n.plus(x, y) override def minus(x: BigInt, y: BigInt): BigInt = n.minus(x, y) override def times(x: BigInt, y: BigInt): BigInt = n.times(x, y) } implicit object BigIntIsExactOrdering extends ExactOrderingImpl[BigInt](BigIntIsIntegral) }
Example 6
Source File: package.scala From hbase-connectors with Apache License 2.0 | 5 votes |
package org.apache.hadoop.hbase.spark import org.apache.hadoop.hbase.util.Bytes import scala.math.Ordering // TODO: add @InterfaceAudience.Private if https://issues.scala-lang.org/browse/SI-3600 is resolved package object hbase { type HBaseType = Array[Byte] def bytesMin = new Array[Byte](0) def bytesMax = null val ByteMax = -1.asInstanceOf[Byte] val ByteMin = 0.asInstanceOf[Byte] val ord: Ordering[HBaseType] = new Ordering[HBaseType] { def compare(x: Array[Byte], y: Array[Byte]): Int = { return Bytes.compareTo(x, y) } } //Do not use BinaryType.ordering implicit val order: Ordering[HBaseType] = ord }
Example 7
Source File: Utils.scala From shc with Apache License 2.0 | 5 votes |
package org.apache.spark.sql.execution.datasources.hbase import java.util import java.util.Comparator import org.apache.avro.generic.GenericRecord import org.apache.hadoop.hbase.util.Bytes import org.apache.spark.sql.catalyst.expressions.MutableRow import org.apache.spark.sql.catalyst.util._ import org.apache.spark.sql.execution.SparkSqlSerializer import org.apache.spark.sql.types._ import scala.collection.mutable.ArrayBuffer import scala.math.Ordering object Utils { def setRowCol( row: MutableRow, field: (Field, Int), src: HBaseType, offset: Int, length: Int): Unit = { val index = field._2 val f = field._1 if (f.sedes.isDefined) { // If we already have sedes defined , use it. val m = f.sedes.get.deserialize(src, offset, length) row.update(index, m) } else if (f.exeSchema.isDefined) { // println("avro schema is defined to do deserialization") // If we have avro schema defined, use it to get record, and then covert them to catalyst data type val m = AvroSedes.deserialize(src, f.exeSchema.get) // println(m) val n = f.avroToCatalyst.map(_(m)) row.update(index, n.get) } else { // Fall back to atomic type f.dt match { case BooleanType => row.setBoolean(index, toBoolean(src, offset)) case ByteType => row.setByte(index, src(offset)) case DoubleType => row.setDouble(index, Bytes.toDouble(src, offset)) case FloatType => row.setFloat(index, Bytes.toFloat(src, offset)) case IntegerType => row.setInt(index, Bytes.toInt(src, offset)) case LongType => row.setLong(index, Bytes.toLong(src, offset)) case ShortType => row.setShort(index, Bytes.toShort(src, offset)) case StringType => row.update(index, toUTF8String(src, offset, length)) case BinaryType => val newArray = new Array[Byte](length) System.arraycopy(src, offset, newArray, 0, length) row.update(index, newArray) case _ => row.update(index, SparkSqlSerializer.deserialize[Any](src)) //TODO } } } // convert input to data type def toBytes(input: Any, field: Field): Array[Byte] = { if (field.sedes.isDefined) { field.sedes.get.serialize(input) } else if (field.schema.isDefined) { // Here we assume the top level type is structType val record = field.catalystToAvro(input) AvroSedes.serialize(record, field.schema.get) } else { input match { case data: Boolean => Bytes.toBytes(data) case data: Byte => Array(data) case data: Array[Byte] => data case data: Double => Bytes.toBytes(data) case data: Float => Bytes.toBytes(data) case data: Int => Bytes.toBytes(data) case data: Long => Bytes.toBytes(data) case data: Short => Bytes.toBytes(data) case data: UTF8String => data.getBytes case data: String => Bytes.toBytes(data) //Bytes.toBytes(input.asInstanceOf[String])//input.asInstanceOf[UTF8String].getBytes case _ => throw new Exception(s"unsupported data type ${field.dt}") //TODO } } } def toBoolean(input: HBaseType, offset: Int): Boolean = { input(offset) != 0 } def toUTF8String(input: HBaseType, offset: Int, length: Int): UTF8String = { UTF8String(input.slice(offset, offset + length)) } }