比较rdd scala中的两个字符串并获得异常任务不可序列化

时间:2017-11-30 15:25:31

标签: scala apache-spark

我有两个字符串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 这个例外有什么解决方案吗?

2 个答案:

答案 0 :(得分:0)

根据名称判断,getSimilarity可能不会使用“main”类中的任何字段,但仍需要引用它才能调用它,因此Spark必须序列化它。将其解压缩到单独的object

答案 1 :(得分:0)

对于RDD上的操作,我认为函数getSimilarity需要是一个UDF。使用spark.functions._包创建UDF。

如果您使用数据集操作,则可以直接使用getSimilarity函数。

ngrx/effects