2017-04-04 8 views
0

インデックス0の値が "2"のgetDouble(0)を使用しています。私の前提は、文字列がDoubleにキャストされていたが、文字列をDoubleエラーにキャストできないということです。 Indexの値をDoubleにキャストしない場合、getDoubleはどのように使用されるべきですか?好ましい方法は何ですか - getString(0).toDoublespark:Row getDoubleメソッドの説明

+0

「toDouble」はキャストではありません。 'asInstanceOf [Double]'は(そして 'String'は決して' Double'にキャストできません)です。 –

答えて

2

あなたが代わりにDoubleの分野でStringとして2を持っている:

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

行の2番目の要素が文字列であるため、これは、エラーを与える:

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