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")
}
}