2017-11-30 4 views
0

シリアライズしない例外タスク得た:RDD [(文字列、文字列)]と私はこれを試みストリング の各対の間の類似度を計算する必要がありますはRDDのスカラで2つの文字列を比較すると、私は二つの文字列のJoindStringsのRDDた

val similarPairsRdd: RDD[(String, String, Double)] = 
    JoindStrings.map(x => (x._1, x._2, getSimilarity(x._1, x._2))) 

機能getSimilarityは、2つの文字列を取り、私は「メイン」スレッドで例外を持つダブル を返す

org.apache.spark.SparkException:タスク直列化可能ではない

また、私はJoindStrings.map.collect()(x => ...を試しましたが、それは私に配列rddを与えません この例外の解決策はありますか?

答えて

0

名前で判断すると、getSimilarityはあなたの「メイン」クラスのフィールドを使用していない可能性がありますが、Sparkがそれをシリアル化する必要があるため参照する必要があります。それを別のobjectに抽出する。

0

RDDでの操作については、関数getSimilarityがUDFである必要があると思います。 spark.functions._パッケージを使用してUDFを作成します。

データセットで操作する場合は、getSimilarity関数を直接使用できます。

val joindStrings : Dataset[(String, String)] = .. source of dataset 
val similarPairsRdd = joindStrings.map { x => (x._1, x._2, getSimilarity(x._1, x._2)) } 
関連する問題