【问题标题】:Why java.lang.IllegalStateException occurs when running Word2VecExample form Scala Spark mllib?为什么从 Scala Spark mllib 运行 Word2VecExample 时会发生 java.lang.IllegalStateException?
【发布时间】:2019-10-15 04:47:26
【问题描述】:

我正在尝试读取 Spark-mllib 示例 (Word2VecExample) 中的文本文件并创建它的词向量。我通过一些文本文件运行它,它没有给出任何错误,但是在读取我的一个文件时,它给出了这个错误,我真的很困惑,因为我尝试了文件格式(utf-8 ) 和 ASCII 字符。 这是我的源代码:

package org.apache.spark.examples.mllib

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
// $example on$
import org.apache.spark.mllib.feature.{Word2Vec, Word2VecModel}
// $example off$

object Word2VecExample {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName("Word2VecExample")
    conf.setMaster("local[4]")
    val sc = new SparkContext(conf)

    val input = sc.textFile("C:\\Users\\...\\Desktop\\yelp_labelled.txt").map(line => line.split(" ").toSeq)

    val word2vec = new Word2Vec()

    val model = word2vec.fit(input)

    val synonyms = model.findSynonyms("1", 5)

    for((synonym, cosineSimilarity) <- synonyms) {
      println(s"$synonym $cosineSimilarity")
    }

    model.save(sc, "C:\\Users\\...\\Desktop\\Edited1Yelp")
    val sameModel = Word2VecModel.load(sc, "C:\\Users\\...\\Edited1Yelp")

    // $example off$

    sc.stop()
  }
}

这是错误:

Exception in thread "main" 19/05/29 18:36:29 INFO BlockManagerInfo: Removed broadcast_4_piece0 on DESKTOP-T5EN156:64774 in memory (size: 13.0 KB, free: 2.2 GB)
java.lang.IllegalStateException: 1 not in vocabulary
    at org.apache.spark.mllib.feature.Word2VecModel.transform(Word2Vec.scala:533)
    at org.apache.spark.mllib.feature.Word2VecModel.findSynonyms(Word2Vec.scala:545)
    at org.apache.spark.examples.mllib.Word2VecExample$.main(Word2VecExample.scala:43)
    at org.apache.spark.examples.mllib.Word2VecExample.main(Word2VecExample.scala)

第 43 行引用了val synonyms = model.findSynonyms("1", 5),但我确信这是真的,因为我使用其他一些文件正确运行了程序。

【问题讨论】:

    标签: scala apache-spark apache-spark-mllib word2vec


    【解决方案1】:

    基于 Spark 示例和 documentation,此错误由 findSynonyms(String, int) 方法引发。此方法中必须有String参数的向量,如果不存在此向量,则错误

    Java.lang.IllegalStateException.

    出现。 因此,在我的示例中,输入字符串参数“1”没有向量。

    【讨论】:

    • 很明显你不了解 Scala。我也不知道 Scala :) 所以,这也是我的问题和 tnx 这个答案。
    【解决方案2】:

    您好,对 Spark 了解不多。也不能发布 cmets 所以必须做一个答案。查看文档here。

    .findSynonyms("字符串",num) "查找与给定单词最相似的 "num" 个单词,不包括单词本身。"

    所以我不禁想知道寻找字符串“1”可能不是问题。在我的脑海中,我很难找到“1”的 5 个同义词,也许是“one”,也许是“uniary”或可能是“individual”。从我读到的 Spark 是一个机器学习库,所以您是否尝试过简化这个问题?也许要求一个同义词或提供一个更简单的字符串来搜索,例如“happy”。不过,这只是我的两分钱,主要是对实际发生的事情感到好奇。

    【讨论】:

    • 我看到了文档。这很有帮助。我根据它的内容回答我的问题。 tnx @亚历山大·罗宾逊
    猜你喜欢
    • 2017-12-20
    • 2011-12-01
    • 1970-01-01
    • 2017-01-28
    • 2020-08-13
    • 2012-07-31
    • 2019-11-16
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多