1
私はデータセットの内容を収集する必要があるユースケースを持っていますが、これは私のドライバ上にメモリが必要なので、一度に「N」したいと思います。 データセットを作成するために一度だけクエリしたいと思います。データセットからN個の要素を一度に取得できますが、それらをメモリに集めることはできません。
私はデータセットの内容を収集する必要があるユースケースを持っていますが、これは私のドライバ上にメモリが必要なので、一度に「N」したいと思います。 データセットを作成するために一度だけクエリしたいと思います。データセットからN個の要素を一度に取得できますが、それらをメモリに集めることはできません。
あなたのような何かを行うことができます:それは例えばDS
内の要素にドライバーにイテレータを与えるあなたはtoLocalIterator
を使用することができます
val dfSrc = (1 to 100).map(i => (i,scala.util.Random.nextDouble())).toDF("id","x")
// define an idnex, e.g. with row_number
val dsWithRnb = dfSrc
.withColumn("rnb",row_number().over(Window.orderBy($"id")))
.cache
// get rows in chunks of 10
val N = 10
(0L to dsWithRnb.count).grouped(N).foreach{batch =>
// collect batch
val batchData = dsWithRnb.where($"rnb".isin(batch:_*)).collect()
}
を:
val ds = ...
ds
.cache
.toLocalIterator
.grouped(N)
.map(nRows => ...)
を