Scala spark word2vec尝试捕获异常



我正在尝试使用spark的word2vec创建一个字典。在这个过程中,我创建了一个包含大约200个单词的Array,并对每个单词应用find同义词函数。然而,在这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)对

我做错了什么尝试和捕捉?有更好的方法吗?

您的catch {}应该返回Double,而不是(String, Double)。否则,编译器将尝试找到Double(由try{}返回)和(String, Double)(在异常情况下由catch{}返回)的共同父级,这是Serializable。

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

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

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

最新更新