Spark sql:选择DecimalType列的标度比数字大的行

我有一个数据框,其数据类型为DecimalType(38,10)。并非所有值都有10个十进制数字。我要选择缩放比例大于4的行(删除尾随的零后)。

有办法吗?

用伪代码类似ds.select(col1,col2).where(col3.hasScale >4)

nanyun1 回答:Spark sql:选择DecimalType列的标度比数字大的行

类似的事情可以做到:

import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;
import org.apache.spark.sql.types.StringType;
import org.apache.spark.sql.types.DataTypes;

val scale = 10

val decimalType = DataTypes.createDecimalType(38,scale)

val data = Seq(
  Row(BigDecimal.decimal(3.302302)),Row(BigDecimal.decimal(3.4434)),Row(BigDecimal.decimal(4.32)),Row(BigDecimal.decimal(4.230240505)),Row(BigDecimal.decimal(7.302)),Row(BigDecimal.decimal(4.34444))
)

val schema = List(
  StructField("number",decimalType,true)
)

val df = spark.createDataFrame(
  spark.sparkContext.parallelize(data),StructType(schema)
)

df.show()

val multiplier = scala.math.pow(10,scale)
val min_scale = 4
val modulus = scala.math.pow(10,scale - min_scale)

df.filter(col("number").multiply(multiplier).mod(modulus).notEqual(0)).show()
本文链接:https://www.f2er.com/2894570.html

大家都在问