我有一个数据框,其数据类型为DecimalType(38,10)。并非所有值都有10个十进制数字。我要选择缩放比例大于4的行(删除尾随的零后)。
有办法吗?
用伪代码类似ds.select(col1,col2).where(col3.hasScale >4)
我有一个数据框,其数据类型为DecimalType(38,10)。并非所有值都有10个十进制数字。我要选择缩放比例大于4的行(删除尾随的零后)。
有办法吗?
用伪代码类似ds.select(col1,col2).where(col3.hasScale >4)
类似的事情可以做到:
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()