scala spark word2vec 尝试捕获异常

scala spark word2vec try and catch exception

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

我想做的是尝试捕获此异常,以便如果该词未生成任何同义词,则继续下一个 return 未知或 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 做错了什么?有更好的方法吗?

您的 catch {} 应该 return 一个 Double,而不是 (String, Double)。否则,编译器将尝试找到 Double(return 由你的 try{} 编辑)和 (String, Double)(return由你的 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})
}