2017-11-03 17 views
0

私はスパークするのがかなり新しく、現在は自分のrddの各列のフィールド(2次元配列として表現されている)の列の類似性を計算しようとしていますこのリンク - https://databricks.com/blog/2014/10/20/efficient-similarity-algorithm-now-in-spark-twitter.htmlスパークマッピング関数の列類似性の計算

例えば私のデータは、私は私の最後のマップは私のマッパー機能がこの

のように見えるこの

enter image description here に見えるようにしたい、この

enter image description here ように見えた場合

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)おそらく、私のマッパー機能のどこかの行や行が欠けているかもしれません。

ありがとう!

答えて

0

1) why can't we?

分散型コンテキストのネストは許可されていないためです。詳細はSPARK-5063を参照してください。SPARK-5063はすでに例外メッセージで言及されています。

2) what are ways we can get column similarity without using a row matrix?

お気に入りのローカルスタックを使用してください(NumPy/SciPyスタックが気になります)。

3) Perhaps I'm missing configuration somewhere or missing lines in my mapper function

あなたはしません。

+0

私は行行列(または自分自身を実装)で動作させようとしていましたが、別のスタックを使うことは考えていませんでした。洞察に感謝します! – willykao

関連する問題