2017-11-30 8 views
1

2進配列に基づいてrddのいくつかの要素(機能)を選択したいと思います。私は、要素がそのインデックスに存在するかどうかを指定する、サイズが40の0,1で構成される配列を持っています。rddのフィルタ要素[0,1]の配列による配列[文字列]

マイRDDは、フォームkddcup99データセット

val rdd=sc.textfile("./data/kddcup.txt") 
val data=rdd.map(_.split(',')) 

どのように対応するインデックスの値がバイナリ配列の1であるdata(rdd[Array[String]])の要素をフィルタリングするか選択することができますが作成されましたか?

+1

あなたは例のデータと予想される出力を共有することができますしてください? – mtoto

答えて

1

私が正しくあなたの質問を理解している場合、次のような配列があります。

val arr = Array(1, 0, 1, 1, 1, 0) 

などに見えるRDD[Array[String]]:今

val rdd = sc.parallelize(Array(
       Array("A", "B", "C", "D", "E", "F") , 
       Array("G", "H", "I", "J", "K", "L") 
      )) 

は、arrは1を持っているのインデックスで要素を取得するにはまず、値として1を持つインデックスを取得する必要があります。arr

val requiredIndices = arr.zipWithIndex.filter(_._1 == 1).map(_._2) 
requiredIndices: Array[Int] = Array(0, 2, 3, 4) 

そしてと似RDDと、あなたはそのインデックスがあなたのrequiredIndices配列に利用可能であるかどうかを確認するzipWithIndexcontainsを使用することができます。

rdd.map(_.zipWithIndex.filter(x => requiredIndices.contains(x._2)).map(_._1)) 
// Array[Array[String]] = Array(Array(A, C, D, E), Array(G, I, J, K)) 
+0

thanxしかし、私は "res9"は何ですか?それは必要ですか?私がres9の代わりにrequiredIndisesを使用すると、私はこのエラーを受け取ります:タスクはシリアル化されません...... –

+0

私の悪いです。はい 'res9'は' requiredIndices'になっています。私はちょうど私のシェルからコードをコピーしました。私は答えを編集します。 – philantrovert

関連する問題