私は、RDD(Long、Foo)のようにリストにフラット化し、最終的にFooの一部であるgetCodeメソッドを呼び出すRDD(Long、util.List [Foo])を持っています。ここに私のアプローチは、これまでspark rddでリストをフラット化する方法は?
val test = source
.filter(x => x.getFooList != null)
.map(x => (x.getFooList, x.getId))
.map{
case(foo, id) => foo.toArray().map(foo => (foo, id))
}
ある理想的な私はこの方法が機能する第一の位置
でIDを持っていると思います。しかしtoArrayメソッドはFooからAnyRefに変換します。私はAnyRefでgetCodeメソッドを呼び出すことはできません。これを行う最善の方法は何ですか?あなたはflatMap
なくmap
を使用する必要がありますあなたのRDDを平らにしたい場合 -
import scala.collection.JavaConverters._
...
case(foo, id) => foo.asScala.map(foo => (foo, id))
...
'JavaConversions'が推奨とScalaの2.12では非推奨とされていません。 'JavaConverters'を使用してください:https://github.com/scala/scala/pull/5109/files – dk14