私はスカラの/:演算子を使用して一連のデータセット集計を計算しています。集計のためのコードは以下の通りである:私はFパラメータとして渡され別々の機能のリストについてはブロックを実行しようとすると、問題ScalaのSparkデータセットの集約
def execute1(
xy: DATASET,
f: Double => Double): Double = {
println("PRINTING: The data points being evaluated: " + xy)
println("PRINTING: Running execute1")
var z = xy.filter{ case(x, y) => abs(y) > EPS}
var ret = - z./:(0.0) { case(s, (x, y)) => {
var px = f(x)
s + px*log(px/y)}
}
ret
}
私の問題が発生します。機能のリストである:
lazy val pdfs = Map[Int, Double => Double](
1 -> betaScaled,
2 -> gammaScaled,
3 -> logNormal,
4 -> uniform,
5 -> chiSquaredScaled
)
リストを集計を実行するエグゼキュータの関数である:最終実行ブロックに
def execute2(
xy: DATASET,
fs: Iterable[Double=>Double]): Iterable[Double] = {
fs.map(execute1(xy, _))
}
:
val kl_rdd = master_ds.mapPartitions((it:DATASET) => {
val pdfsList = pdfs_broadcast.value.map(
n => pdfs.get(n).get
)
execute2(it, pdfsList).iterator
問題は、一方で集計が行われると、出力配列の最初のスロットにすべて集計されているように見えますが、各関数の集計を別々に表示したいと思っています。私は5つの機能すべてが実際に実行されていること、そしてそれらが最初のスロットで合計されていることを確認するためにテストを実行しました。
The pre-divergence value: -4.999635700491883
The pre-divergence value: -0.0
The pre-divergence value: -0.0
The pre-divergence value: -0.0
The pre-divergence value: -0.0
これは私がこれまで実行してきた中で最も困難な問題の1つで、どの方向性も高く評価されます。その支払期日がどこであるかを示す。ありがとう! https://spark.apache.org/docs/2.1.0/api/scala/index.html#org.apache.spark.sql.Datasetと実際の型パラメータDataSet[T]
を必要とし、その名前は、すべての資本ケースではありません。