2016-11-18 30 views
1

プロジェクトでpython3を使ってsparkを使っているときに問題が発生しました。 Key-Valueペアでは、('1','+1 2,3')のように、"2,3"という部分が確認したいコンテンツでした。だから私は、次のコードを書いた:('2','+1'):そのような行った後
(このキーと値のペアがp_listと呼ばれるRDDに保存されたと仮定)pysparkでsparkの "for"ループを使うにはどうすればいいですか


def add_label(x): 
    label=x[1].split()[0] 
    value=x[1].split()[1].split(",") 
    for i in value:  
     return (i,label) 
p_list=p_list.map(add_label) 

を、私は結果を得ることができます('2','+1')('3','+1')である必要があります。マップ操作の "for"ループが一度だけだったようです。どうすれば複数回することができますか?または、私はマップ操作や操作を減らすために "for"ループのような関数を実装するために使用できる他の方法はありますか?

私が本当に扱っているのは大きなデータセットです。だから私はAWSクラスタを使用して、並列化でループを実装する必要があります。クラスタ内のスレーブノードはループを理解していないようです。スパークRDD機能を使って、そのことを知らせるにはどうすればいいですか?または、どのように別のパイプラインの方法でこのようなループ操作を行うことができますか(これはSpark RDDの主な設計の1つです)。

+0

私はこの質問からsparkタグを削除したいと思うのですが、これは実際には 'RDD.map'以外のスパーク特有のものではないからです。 –

+0

私のプロジェクトの詳細は言及しません。それは本当にスパークのアプリケーションです。上記の問題は、私が会った主な問題の要約に過ぎません。 rddに保存されている( '1'、 '+ 1 2,3などの)キーと値のペアがあります。私はラベルと次の子ノードを比較し、すべてのキーと値のペアについてそれぞれ(子ノード、ラベル)を返す必要があります。操作全体は、RDD.map()。filter()。reduceByKey()などがあります。スパーククラスタを使用してAWS上で実行する必要があります。 – Linghao

+0

'rdd.foreach()'を試してみましたか? – Kristian

答えて

0

return文をループ内に入れることはできません。それ以外の場合は、最初の反復後に戻ります。決して2回目の反復にはなりません。あなたが試みることができる何

は、ループ内で作成されたタプルのすべてのリストになります。この

result = [] 
for i in value: 
    result.append((i,label)) 
return result 

、その後resultです。

+0

私はあなたの要点を得て、rdd.flatMap()を使ってrddのすべての要素の結果リストを平坦化しようとします。ありがとうございました。 – Linghao

関連する問題