scala spark word2vec尝试并捕获异常

时间:2015-06-09 10:06:13

标签: scala apache-spark try-catch

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

我要做的是尝试捕获此异常,以便如果单词不生成任何同义词,则转到下一个并返回类似unknown或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做错了什么?有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

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

你真的想在parallelize之前做val synonyms = sc.parallelize(listwords) map { x => (x, try {model.findSynonyms(x, 30)} catch {case e: Exception => 0.0}) } 吗?还是之后?

我会这样写(首先将listWords并行化以得到一个rdd,然后在这个rdd上做地图):

print