【问题标题】:scala spark word2vec try and catch exceptionscala spark word2vec 尝试捕获异常
【发布时间】:2015-06-09 10:06:13
【问题描述】:

我正在尝试使用 spark 的 word2vec 创建字典。在此过程中,我创建了一个大约 200 个单词的数组,并将 findSynonyms 函数应用于每个单词。但是,在 200 个单词中,会有几个单词不会返回任何同义词(我想是由于训练数据的大小)。然后 spark 函数将抛出一个异常,触发进程停止。

我要做的是尝试捕获此异常,以便如果该单词未生成任何同义词,则转到下一个并返回未知或 null 之类的内容。

这是我一直在做的事情:

 val synonyms = sc.parallelize(listwords map{x=> (x, try {model.findSynonyms(x, 30)} catch {case e: Exception => ("Exception",0.0) })})

但是,使用 Try 和 Catch 会将值同义词的类型转换为 java.io.Serializable 而不是成对的 (String, Double)

我在 Try and Catch 上做错了吗?有没有更好的方法来做到这一点?

【问题讨论】:

    标签: scala apache-spark try-catch


    【解决方案1】:

    您的catch {} 应返回Double,而不是(String, Double)。否则,编译器将尝试查找 Double(由您的 try{} 返回)和 (String, Double)(由您的 catch{} 返回以防异常)的公共父级,这是可序列化的。

    你真的想在parallelize之前做map吗?还是之后?

    我会这样写(首先并行化 listWords 以获得一个 rdd,然后在这个 rdd 上做映射):

    val synonyms = sc.parallelize(listwords) map { x => 
      (x, try {model.findSynonyms(x, 30)} catch {case e: Exception => 0.0})
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-13
      • 2011-12-05
      • 2014-05-11
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多