spark:Row getDouble方法的解释

时间:2017-04-04 02:05:18

标签: scala apache-spark

我正在使用getDouble(0),其中索引0处的值为“2”。我的假设是字符串将被强制转换为Double但我得到的字符串不能转换为Double错误。如果不将索引的值强制转换为Double,那么如何使用getDouble?什么是首选方式 - getString(0).toDouble

1 个答案:

答案 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