在scala数据帧中将字符串列转换为十进制

时间:2020-10-27 08:34:10

标签: scala dataframe casting

我有一个数据框(标量) 我在笔记本中同时使用pyspark和scala

#pyspark
spark.read.csv(output_path + '/dealer', header = True).createOrReplaceTempView('dealer_dl')

%scala
import org.apache.spark.sql.functions._
val df = spark.sql("select * from dealer_dl")

如何在scala数据帧中将字符串列(数量)转换为十进制。

我尝试如下。

 %scala
 df = df.withColumn("amount", $"amount".cast(DecimalType(9,2)))

但是我收到如下错误:

错误:重新分配给val

我习惯了pyspark,对scala还是很陌生。我需要按Scala进行操作以进一步进行操作。请告诉我。谢谢。

1 个答案:

答案 0 :(得分:1)

在scala中,您无法重新分配定义为val的引用,但是val是不可变的引用。如果要使用重新分配某些引用,则可以使用var,但更好的解决方案是不要将某些内容重新分配给相同的引用名称并使用其他val。 例如:

val dfWithDecimalAmount = df.withColumn("amount", $"amount".cast(DecimalType(9,2)))