私は、結果にタイプがDataset[Point]
またはArray[Point]
であることを望む次の関数を持っています。しかし、それはDataset[Array[Point]]
を返します。データセットと配列をマップして新しい行を生成する方法(データセット[配列] [ポイント]]ではなくデータセット[ポイント])?
また、結果をPoint.Point >= 8
でフィルタリングしたいとします。フィルタ関数を呼び出す最良の場所はどこですか?
def compare2(dbo: Dataset[Cols], ods: Array[Cols]) = {
import dbo.sparkSession.implicits._
dbo.mapPartitions(p => p.map(l => ods.map(r =>
Point(l.Id, r.Id, getPoint(l, r))))
//.filter(p => p.Point >= 8) // p is Array[Point]
)
}
case class Cols (Id: Int, F1: String, F2: String, F3: String)
case class Point (Id1: Int, Id2: Int, Point: Int)
これは正しい考えですが、おそらく 'dbo.mapPartitions(p => p.flatMap(l => ods.map(r =>'? –