2016-05-03 11 views
-1

私はSpark RDDのすべての異なる値をコンマで区切って連結しようとしています。これは私のコードです:RDDでForeachが動作しない

def genPredicateIn(data: RDD[String], attribute: String): String = { 
    var s: String = attribute + " in {" 
    val distinct = data.distinct 
    distinct.foreach(s += ", " + _) 
    s += "}" 
    s 
} 

しかし、それは私に戻ってちょうど"attribute in {}"、なぜ?私の間違いは何ですか?

私はval array <- data.distinct.collectと書いてそれを繰り返します。どうして?

+0

これがうまくいけば、とにかく{data1、data2} 'の属性が得られます –

+0

はい私の問題ではありません –

+1

ラムダに割り当てがあるとは思いません。なぜRDDを集めてから参加できないのですか?それは本質的にあなたがとにかくやっていることです。代入ができないのは、Sparkが文字列をすべてのワーカーノードに渡してデータのパーティションと連結することができないからです。 –

答えて

1

PySparkで同様の例を実行すると、「ラムダに代入を含めることはできません」ということになるので、Scalaも同様に動作すると仮定します。

RDDをcollectにすることができます。その後、コンマ結合を実行する必要があります。それは本質的にあなたがとにかくやっていることです。

Sparkがあなたの文字列をすべてのワーカーノードに渡してそれをデータの別々のパーティションに連結し、その結果を蓄積して実行中のコードに戻すことができないためです。

関連する問題