Spark SQL中具有等效精度的十进制类型

时间:2018-07-09 18:53:41

标签: apache-spark apache-spark-sql

与SQL中的DecimalType(2,9)等效的Spark SQL数据类型是什么?

例如:print(column.dataType==X) =>应该给我True。 SQL中Column的数据类型为DecimalType(2,9)

尝试:X= DataTypes.createDecimalType(2,9),工作正常

我正在寻找一个通用的DecimalType类,以过滤数据帧中的所有DecimalType列,而不考虑精度和小数位数。

1 个答案:

答案 0 :(得分:4)

每种DecimalType类型都是DecimalType类的实例:

from pyspark.sql.types import DecimalType

df = (spark
  .createDataFrame(["1.32"], "string")
  .selectExpr("CAST(value AS DECIMAL(4, 2)) AS value"))

isinstance(df.schema["value"].dataType, DecimalType)
# True
import org.apache.spark.sql.types._

val df = Seq("1.32").toDF("value")  
  .selectExpr("CAST(value AS DECIMAL(4, 2)) AS value")

df.schema("value").dataType match {
  case _: DecimalType => true
  case _ => false
}
// Boolean = true

当然,您永远不会遇到DECIMAL(2,9),因为不可能有大于精度的比例尺。