Почему не удается правильно загрузить сохраненную локальную модель LDA в среде искры? - PullRequest
0 голосов
/ 30 мая 2019

Я изучал и реализовывал функции spark mlib и не могу загрузить сохраненную модель lda.

Я работаю с spark 2.1.0 и scala 2.11.11

Если я пытаюсьиспользовать модель сразу после того, как я обучил ее в том же классе

val lda = new LDA().setK(20).setMaxIter(10)
val model = lda.fit(ldadata)
val topics = model.describeTopics(10)
println("The topics described by their top-weighted terms:")
topics.show(false)

Я могу легко получить нужный мне вывод.

, но если я сохраню модель

model.write.overwrite().save("/usr/local/LDAmodel400w")

, а затем попробуйте загрузить его в другой класс

val model = LocalLDAModel.load("/usr/local/LDAmodel400w")  
val topics = model.describeTopics(10)
println("The topics described by their top-weighted terms:")
topics.show(false)

Я бы получил

Exception in thread "main" java.lang.UnsupportedOperationException: empty collection
        at org.apache.spark.rdd.RDD$$anonfun$first$1.apply(RDD.scala:1369)
        at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
        at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
        at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
        at org.apache.spark.rdd.RDD.first(RDD.scala:1366)
        at org.apache.spark.ml.util.DefaultParamsReader$.loadMetadata(ReadWrite.scala:379)
        at org.apache.spark.ml.clustering.DistributedLDAModel$DistributedLDAModelReader.load(LDA.scala:767)
        at org.apache.spark.ml.clustering.DistributedLDAModel$DistributedLDAModelReader.load(LDA.scala:762)
        at org.apache.spark.ml.util.MLReadable$class.load(ReadWrite.scala:215)
        at org.apache.spark.ml.clustering.DistributedLDAModel$.load(LDA.scala:781)
        at ldatest.ldamaven.loadlda$.main(loadlda.scala:31)
        at ldatest.ldamaven.loadlda.main(loadlda.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:738)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Интересно, где я сделал не так.

...