我在一个文件中有如下数据:
7373743343333444.
7373743343333432.
此数据应转换为十进制值,并应位于8.7的位置,其中8是十进制前的数字,7是十进制后的数字。我正在尝试读取数据文件,如下所示:
val readDataFile = Initialize.spark.read.format("com.databricks.spark.csv").option("header", "true").option("delimiter", "|").schema(***SCHEMA*****).load(****DATA FILE PATH******)
我试过这个:
val changed = dataFileWithSchema.withColumn("COLUMN NAME", dataFileWithSchema.col("COLUMN NAME").cast(new DecimalType(38,3)))
println(changed.show(5))
但它只在数字的末尾给我零,就像这样:
7373743343333444.0000
但我想要的数字格式如上所述,我如何才能做到这一点?
2条答案
按热度按时间e37o9pze1#
一个简单的组合
regexp_replace
,trim
以及format_number
内置函数应该可以满足您的需求pwuypxnk2#
将列除以
10^8
,将小数点移动8步。在那之后DecimalType
得到正确的小数位数。因为有16个数字开始,这意味着最后一个被删除。