2017-03-21 10 views
0

私はRDD [LabeledPoint]を持っており、ラベルの最小値と最大値を見つけて、問題は、ラベルに到達するためにさまざまな方法を試したことですが、何も正しく機能しません。RDDの最小、最大ラベルを見つける[LabeledPoint] Spark/Scala

ラベルとRDDの機能のみにアクセスするにはどうすればよいですか?それらをList [Double]やList [Vector]として取得する方法はありますか?

データフレームに移動できません。

答えて

0

オクラホマので、あなたはラベルを変更する場合は、もう一度、あなたはマップ機能を使用することができます

val labels = rdd.map(x=> x.label) 
val min = labels.min 
val max = labels.max 

マップ機能で遊んでた後、私はこの解決策を考え出した

rdd.map(x=> x.label - 5) 

この方法で、RDD [LabeledPoint]のラベル部分で遊ぶことができます。

下記のCyrilのコメントの後、私はあなたのRDDを維持し、あなたが望むようにラベルだけを変更できるコマンドを追加することにしました。

val newRdd = rdd.map(x => x.copy(x.label -5)) 
+0

'RDD'でアクション/トランスフォーメーションが実際に実行されるときは、同じことを2回計算したり、' MemoryOverflow'を危険にさらすのを避けるために気をつけてください。あなたのケースでは、変換 'x => x.label'はあなたのコレクションで2回実行されます(一回は' min'のために、もう一度 'max'のために一回)。 –

+0

@CyrilleCorpet今質問がありました。私は、私が作った減算でラベルを変えて、同じRDDを使いたいと思っています。それ、どうやったら出来るの?私はちょうど行ってval rdd = rdd.map(x => x.label -5)をするならば、私はラベルを持っているだけで、Rdd全体ではありません – CnewbieWannabePro

+0

あなたは 'rdd.map(x => x。 copy(label = x.label-5)) ' –

0

あなたはとにかくそれを操作することができSparkSession.For DATAFRAMEで既存のRDDからデータフレームを作成することができます。

+0

データフレームは私が使用することができないものですが、私はそれを上に書いたはずです。今すぐ編集します。 – CnewbieWannabePro

+0

RDDは不変なので、同じRDD上のラベルを変更することは不可能です。再計算を避けるために、RDDを以前にキャッシュすることができます。 – Wang

関連する問題