2017-04-04 86 views
0

我正在使用getDouble(0),其中索引0處的值爲「2」。我的假設是該字符串將轉換爲Double,但我得到一個字符串不能轉換爲Double錯誤。 getDouble如果不是將索引中的值轉換爲Double,應如何使用?什麼是首選方式 - getString(0).toDoublespark:Row getDouble方法的解釋

+0

請注意'toDouble'不是演員; 'asInstanceOf [Double]'是(並且'String'永遠不能轉換爲'Double')。 –

回答

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 
+0

我對get *方法感到困惑 - 我以爲他們確實在投射。文檔沒有提供關於此的額外信息。 – cosmosa

+0

他們似乎存在提供一種類型安全而不是類型鑄造的水平。 – Psidom