2016-05-23 16 views
0

ファイルがあり、mllibアルゴリズムに渡したいと思います。だから私は、次の例など何かやっている:if条件に基づいてspark rdd mapアクションの行をスキップする方法

val data = sc.textFile(my_file). 
    map {line => 

     val parts = line.split(","); 
     Vectors.dense(parts.slice(1, parts.length).map(x => x.toDouble).toArray) 
}; 

を、これは時々私が欠けている機能を持っていることを除いて動作します。それはある行の1つの列にデータがなく、このような行を捨てたい場合があります。

は、だから、私はこのskipLineのアクションを行うことができますどのようにこのmap{line => if(containsMissing(line) == true){ skipLine} else{ ... //same as before}}

ような何かをしたいですか?

答えて

1

あなたは、このような行をフィルタリングするfilter機能を使用することができます。

val data = sc.textFile(my_file) 
    .filter(_.split(",").length == cols) 
    .map {line => 
     // your code 
    }; 

colsが有効な行の列数を保持する変数と仮定します。

0

あなたはflatMap、一部このためなし使用することができます:あなたは複数回RDD以上のマッピングを避ける

def missingFeatures(stuff): Boolean = ??? // Determine if features is missing 

val data = sc.textFile(my_file) 
    .flatMap {line => 
    val parts = line.split(","); 
    if(missingFeatures(parts)) None 
    else Some(Vectors.dense(parts.slice(1, parts.length).map(x => x.toDouble).toArray)) 
}; 

この道を。

関連する問題