我正在尝试使用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做错了什么?有更好的方法吗?
答案 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