私はスパークするのがかなり新しく、現在は自分のrddの各列のフィールド(2次元配列として表現されている)の列の類似性を計算しようとしていますこのリンク - https://databricks.com/blog/2014/10/20/efficient-similarity-algorithm-now-in-spark-twitter.html)スパークマッピング関数の列類似性の計算
例えば私のデータは、私は私の最後のマップは私のマッパー機能がこの
のように見えるこのdef mapper(pairs):
id = pairs[0]
matrix = pairs[1]
rows = spark.sparkContext.parallelize(matrix)
mat = RowMatrix(rows)
score = mat.columnSimilarities().entries.first().value
return (id,score)
問題は、私は、行の行列になるために私のRDDをマップしようとしたとき、私は、我々は、マップ機能でRDDを実行することはできません理解してどのようなことから、このエラー
pickle.PicklingError: Could not serialize object: Exception: It appears that you are attempting to reference SparkContext from a broadcast variable, action, or transformation. SparkContext can only be used on the driver, not in code that it run on workers. For more information, see SPARK-5063.
を取得することです。私はいくつかの例では、マッパーの外のスパークのコンテキストでこれをテストして、私はそれを働かせることができます。だから私の質問は#1です)なぜ私たちはできないのですか? #2)行行列を使用せずに列の類似性を得る方法は何ですか? #3)おそらく、私のマッパー機能のどこかの行や行が欠けているかもしれません。
ありがとう!
私は行行列(または自分自身を実装)で動作させようとしていましたが、別のスタックを使うことは考えていませんでした。洞察に感謝します! – willykao