2017-04-04 5 views
0

I getDouble bin mit (0), wobei der Wert bei Index 0 "2" ist. Meine Annahme war, dass die Zeichenkette auf Double umgewandelt werden würde, aber ich bekomme einen String, der nicht in Double Error umgewandelt werden kann. Wie soll getDouble verwendet werden, wenn der Wert nicht an einen Double-Index übergeben wird? Was ist der bevorzugte Weg - getString(0).toDouble?Funken: Erläuterung von Reihen- getDouble Methode

+0

Beachten Sie, dass toDouble kein Cast ist; 'asInstanceOf [Double]' ist (und ein 'String' kann niemals in' Double' umgewandelt werden). –

Antwort

2

Sie haben 2 als String in diesem Bereich statt Double:

val df = Seq((2.0, "2")).toDF("A", "B") 
// df: org.apache.spark.sql.DataFrame = [A: double, B: string] 

Dieser Fehler gibt, da das zweite Element in der Reihe ist ein 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 

Während das funktioniert gut :

df.first().getString(1).toDouble 
// res4: Double = 2.0 
+0

Ich war verwirrt über die get * -Methoden - ich dachte, sie hätten Castings gemacht. Die Dokumentation bietet keine zusätzlichen Informationen dazu. – cosmosa

+0

Sie scheinen zu existieren, um ein Niveau der Typsicherheit anstelle des Typgießens zur Verfügung zu stellen. – Psidom