2016-11-29 7 views
0

私の機能では、データフレームのシーケンスfinalDFを返します。下のループではmapはSeq[DataFrame]を返し、finalDFに保存されているので、処理がさらに進む場合がありますが、フィルタ処理されたデータフレームを各繰り返しに保存して次のループ。タイプSeq [ユニット]の式がスケーラのSeq [DataFrame]に一致しません

どうすればよいですか?それをある一時的な値に代入しようとすると、タイプSeq[unit]の式が期待されるタイプSeq[DataFrame]に適合しないというエラーがスローされます。

var finalDF: Seq[DataFrame] =null 

    for (i <- 0 until stop){ 
    finalDF=strataCount(i).map(x=> { 
    df.filter(df(cols(i)) === x) 

    //how to get the above data frame to pass on to the next computation? 
    } 
) 

} 

よろしく

答えて

1

多分これは便利です:

val finalDF: Seq[DataFrame] = (0 to stop).flatMap(i => strataCount(i).map(x => df.filter(df(cols(i)) === x))).toSeq 

flatMapSeq(Seq)を平らにします。

(0 to stop).flatMap(j => { 
(0 to stop).flatMap(i => strataCount(i).map(x => df.filter(df(cols(i)) === x))) 
}).toSeq 

たりしてみてくださいを::for yield、参照多分あなたが好きそれを行うことができ、2つのカウンタの

scala> (0 to 20).flatMap(i => List(i)) 
res0: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) 
scala> (0 to 20).map(i => List(i)).flatten 
res1: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) 

(0 to stop)0からstopにループ、flatMapList、同様に平らになります:Scala for/yield syntax

+0

ありがとう、これは本当に役に立ちました。あなたはこの構文をどうか説明してください。そしてもう一つのことは、私はfinalDFですべての値に対して別のループを適用したいのですが、ここで2つのカウンタを指定することは可能でしょうか?ありがとう – Garipaso

+0

@ラニ、答えを更新、あなたがチェックすることができます – chengpohi

関連する問題