Scala sparkSQL.createDataFrame中出现奇怪的类型转换错误

Scala sparkSQL.createDataFrame中出现奇怪的类型转换错误,scala,apache-spark,apache-spark-sql,boxing,Scala,Apache Spark,Apache Spark Sql,Boxing,以下代码失败: val RDD = sparkContext.parallelize(Seq( Row("123", new java.lang.Integer(456)) )) val schema = StructType( StructField("str", StringType) :: StructField("dbl", DoubleType) :: Nil ) val df = sqlContext.createDataFrame(RDD, schema) df.col

以下代码失败:

val RDD = sparkContext.parallelize(Seq(
  Row("123", new java.lang.Integer(456))
))
val schema = StructType(
  StructField("str", StringType) ::
  StructField("dbl", DoubleType) :: Nil
)
val df = sqlContext.createDataFrame(RDD, schema)
df.collect().foreach(println)
除此之外:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double
    at scala.runtime.BoxesRunTime.unboxToDouble(BoxesRunTime.java:119)
    at org.apache.spark.sql.catalyst.expressions.BaseGenericInternalRow$class.getDouble(rows.scala:44)
    at org.apache.spark.sql.catalyst.expressions.GenericInternalRow.getDouble(rows.scala:221)
    ....
请注意,这只是一个测试用例,在实际情况中,类型java.lang.Integer是从另一个函数返回的,因此我无法从头创建具有未绑定数值的行


如何解决这个问题?

整数不是双精度数,Spark的抱怨是正确的。手动类型转换:

val toDouble = udf {x: Int => x.toDouble}
df.withColumn("dbl", toDouble(df.col("ints")))

整数不是双精度的,Spark在抱怨中是正确的。手动类型转换:

val toDouble = udf {x: Int => x.toDouble}
df.withColumn("dbl", toDouble(df.col("ints")))

在创建数据帧之前,可以将整数转换为双精度:

val newRdd = RDD.map({ case Row(str, i: java.lang.Integer) => Row(str, i.toDouble) })
val df = sqlContext.createDataFrame(newRdd, schema)

在创建数据帧之前,可以将整数转换为双精度:

val newRdd = RDD.map({ case Row(str, i: java.lang.Integer) => Row(str, i.toDouble) })
val df = sqlContext.createDataFrame(newRdd, schema)

刚刚尝试用456替换新的java.lang.Integer456,但仍然出现相同的错误。有没有办法启用typecast?我刚刚尝试用456替换新的java.lang.Integer456,但仍然出现同样的错误。有没有办法启用类型转换?