このブログを検索

2015/08/05

Scala : stableSort の結果をMap変換すると [D cannot be cast to scala.collection.Seq が出る。

Scalaの素人が苦戦中に見つけたScalaの癖(?)
”D@ 6ef3e973”のような謎のObjectが生成されて
java.lang.ClassCastException: [D cannot be cast to scala.collection.Seqが発生する。

原因は分からないが、Tuple[Double]=Tuple[ (1.1), (1.2),(1.3),(2.4) ]の状態から直接Mapを作るとこうなる。
参考にIntだと”D”→"I"になる。

以下のような場合発生する。
scala>  val key = "key"
val ts = Array ( (3, 1.3 ), (2,1.2),(1, 1.1), (4, 2.4) )
scala.util.Sorting.stableSort(ts, (e1: (Int, Double), e2: (Int, Double) ) => e1._1 < e2._1)
val rdd = ( "test", (key -> ts.map(_._2)) )
rdd match {
  case (key, ts: Map[String, Seq[Double]])  => {
    println(key)
    ts.map( x => println(x._1 + "/" + x._2))
    }
}
解決は
val rdd = ( "test", (key -> ts.map(_._2).toSeq) )
のようにするとWrappedArray(1.1, 1.2, 1.3, 2.4)のようになりArrayの中にDouble Objectが入れる。

とりあえずここまで

0 件のコメント:

コメントを投稿