私の列の1つがオブジェクトの配列であるSpark DataFrameがあります。私はその配列をフィルタリングする操作をしたいと思います。下の私の例では、私は子供がいる親を持っています。私は大人の子供だけを取得したいと思います。配列の要素にフィルタを適用する最も簡潔な方法は何ですか?Sparkの列
import spark.implicits._
case class Child(name: String, age: Int)
case class Parent(name: String, children: Array[Child])
val rawData = Seq(Parent("Mom", Array(Child("Jane", 9))), Parent("Dad", Array(Child("Hubert", 28), Child("David", 27), Child("Jim", 25))))
val data = spark.createDataFrame(rawData)
私は来ることができた最も近いです:
val adultChildren = udf((children: mutable.WrappedArray[Child]) => {
val rowArray = children.asInstanceOf[mutable.WrappedArray[GenericRowWithSchema]]
val ret = rowArray.filter(c => c.getAs[Int]("age") > 18)
ret.asInstanceOf[mutable.WrappedArray[Child]]
})
data.select(adultChildren($"children")).show()
これはやや面倒です。 Sparkはオブジェクトを直列化する時間が少なくて済みますが、それは冗長です。
もっと簡潔な方法がありますか?
スパークのどのバージョンですか? –
私は2.0.2を使用しています –