我正在使用getDouble(0),其中索引0处的值为“2”。我的假设是字符串将被强制转换为Double但我得到的字符串不能转换为Double错误。如果不将索引的值强制转换为Double,那么如何使用getDouble?什么是首选方式 - getString(0).toDouble
?
答案 0 :(得分:2)
您在该字段中使用2
作为String
而不是Double
:
val df = Seq((2.0, "2")).toDF("A", "B")
// df: org.apache.spark.sql.DataFrame = [A: double, B: string]
这会产生错误,因为行中的第二个元素是一个字符串:
df.first().getDouble(1)
// java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
// at scala.runtime.BoxesRunTime.unboxToDouble(BoxesRunTime.java:114)
// at org.apache.spark.sql.Row$class.getDouble(Row.scala:242)
// at org.apache.spark.sql.catalyst.expressions.GenericRow.getDouble(rows.scala:192)
// ... 48 elided
虽然这很好用:
df.first().getString(1).toDouble
// res4: Double = 2.0