我在Spark的Java版本中使用潛在Dirichlet分配。Spark的OnlineLDAOptimizer導致Java中的IndexOutOfBoundsException
以下行正常工作:
LDAModel ldaModel = new LDA()//
.setK(NUM_TOPICS)//
.setMaxIterations(MAX_ITERATIONS)//
.run(corpus);
這使用(我相信)默認的EM優化器。
然而,當我嘗試使用隨機變優化,具體如下:
OnlineLDAOptimizer optimizer = new OnlineLDAOptimizer()//
.setMiniBatchFraction(2.0/MAX_ITERATIONS);
LDAModel ldaModel = new LDA()//
.setK(NUM_TOPICS)//
.setOptimizer(optimizer)//
.setMaxIterations(MAX_ITERATIONS)//
.run(corpus);
我得到如下:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 11.0 failed 1 times, most recent failure: Lost task 1.0 in stage 11.0 (TID 50, localhost): java.lang.IndexOutOfBoundsException: (0,2) not in [-3,3) x [-2,2)
at breeze.linalg.DenseMatrix.apply(DenseMatrix.scala:84)
at breeze.linalg.Matrix$class.apply(Matrix.scala:39)
...
沒有人有任何成功獲取在線優化工作在Spark版本的Java中?據我所知,這是唯一的區別。
這不能解決問題。這個改變意在解決什麼(以防我失去了一些東西?)。另請注意,這涉及Java,而不是Spark的Scala版本。 –