def inferSparkType()

in spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/InferredExpression.scala [297:337]


  def inferSparkType(t: Type): DataType = {
    if (t =:= typeOf[Geometry]) {
      GeometryUDT
    } else if (t =:= typeOf[Array[Geometry]] || t =:= typeOf[java.util.List[Geometry]]) {
      DataTypes.createArrayType(GeometryUDT)
    } else if (t =:= typeOf[Geography]) {
      GeographyUDT
    } else if (t =:= typeOf[Array[Geography]] || t =:= typeOf[java.util.List[Geography]]) {
      DataTypes.createArrayType(GeographyUDT)
    } else if (InferredRasterExpression.isRasterType(t)) {
      InferredRasterExpression.rasterUDT
    } else if (InferredRasterExpression.isRasterArrayType(t)) {
      InferredRasterExpression.rasterUDTArray
    } else if (t =:= typeOf[java.lang.Double]) {
      DoubleType
    } else if (t =:= typeOf[java.lang.Integer]) {
      IntegerType
    } else if (t =:= typeOf[Double]) {
      DoubleType
    } else if (t =:= typeOf[Int]) {
      IntegerType
    } else if (t =:= typeOf[Long] || t =:= typeOf[java.lang.Long]) {
      LongType
    } else if (t =:= typeOf[String]) {
      StringType
    } else if (t =:= typeOf[Array[Byte]]) {
      BinaryType
    } else if (t =:= typeOf[Array[Int]] || t =:= typeOf[Array[java.lang.Integer]]) {
      DataTypes.createArrayType(IntegerType)
    } else if (t =:= typeOf[Array[Long]] || t =:= typeOf[Array[java.lang.Long]]) {
      DataTypes.createArrayType(LongType)
    } else if (t =:= typeOf[Array[Double]] || t =:= typeOf[java.util.List[java.lang.Double]]) {
      DataTypes.createArrayType(DoubleType)
    } else if (t =:= typeOf[Option[Boolean]]) {
      BooleanType
    } else if (t =:= typeOf[Boolean]) {
      BooleanType
    } else {
      throw new IllegalArgumentException(s"Cannot infer spark type for $t")
    }
  }