将DataFrame字段类型从Integer转为Double时遭遇报错问题
解决Spark DataFrame字段类型转换的报错问题
嗨,我来帮你搞定这个转换问题!你遇到的error: unclosed character literal错误其实是个小细节问题——在Scala里,单引号'是用来表示单个字符的,而我们定义列名、数据类型这类字符串时,必须用双引号"。你之前的代码里用了'value'和'double',Scala会把它们识别成单个字符,自然就报“未闭合字符字面量”的错啦。
正确的转换代码
把单引号换成双引号就可以解决问题,这里给你两种写法:
- 直接引用列的写法:
label = label.withColumn("value", label("value").cast("double"))
- 使用
col函数的更清晰写法(需要先导入函数):
import org.apache.spark.sql.functions.col label = label.withColumn("value", col("value").cast("double"))
验证转换结果
执行完转换后,你可以再打印Schema确认类型是否更改成功:
label.printSchema()
正常情况下会输出:
root
|-- value: double (nullable = false)
另外补充一句:如果是在PySpark(Python环境)里,单引号是可以正常使用的,但从你的报错来看,你应该是在Scala环境下操作,所以一定要注意引号的区别哦~
内容的提问来源于stack exchange,提问作者Parv bali
相关产品推荐
相关产品推荐

