我在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版本。 –