我正试着这样做
val df = Seq((50984908,1000)).toDF("x","y")
val myExpression = "x * y"
df.withColumn("z",expr(myExpression)).show()
我可以看到它导致整数溢出,它不会被转换为long
+--------+----+----------+
| x| y| z|
+--------+----+----------+
|50984908|1000|-554699552|
+--------+----+----------+
有没有人能提供一些建议来避免这些溢出?有没有一种方法可以让spark自动正确地推断出类型的更高精度(例如:integer->long),(float->double/bigdecimal)?
1条答案
按热度按时间8gsdolmq1#
在scala中,可以通过添加
L
后缀。如果这样做,类型将正确推断为Long
:如果需要对列类型进行更多控制,也可以使用函数
createDataFrame
: