我有两个字符串JoindStrings的rdd:RDD [(String,String)]我需要计算每对字符串之间的相似性 我试过这个:
val similarPairsRdd: RDD[(String, String, Double)] =
JoindStrings.map(x => (x._1, x._2, getSimilarity(x._1, x._2)))
函数getSimilarity
接受两个字符串并返回double
我在线程“main”中有一个例外
org.apache.spark.SparkException:任务不可序列化
另外,我试过JoindStrings.map.collect()(x => ...
,但它给了我数组而不是rdd
这个例外有什么解决方案吗?
答案 0 :(得分:0)
根据名称判断,getSimilarity
可能不会使用“main”类中的任何字段,但仍需要引用它才能调用它,因此Spark必须序列化它。将其解压缩到单独的object
。
答案 1 :(得分:0)
对于RDD上的操作,我认为函数getSimilarity需要是一个UDF。使用spark.functions._包创建UDF。
如果您使用数据集操作,则可以直接使用getSimilarity函数。
ngrx/effects