2017-11-21 5 views
0

私はApache Sparkのクイックスタートに取り組んでいます。私はコレクションの変換の効率について疑問を抱いていました。次のコードを改善する方法を知りたいと思います:Scala:2つの方がより効率的にスライドする

// Variable initialisation 
val N = 300.0 
val input = (0.0 to N-1 by 1.0).toArray 
val firstBigDivi = 100 
val windowDuration = 6 
val windowStep = 3 

// Process 
val windowedInput = inputArray. 
sliding(firstBigDivi,firstBigDivi).toArray. //First, a big division 
map(arr=>arr.sliding(windowDuration,windowStep).toArray)//Second, divide the division 

同じ方法を効率的に行う別の方法はありますか?私は、このコードは、入力配列(これは大きなコレクションの問題かもしれない)の上に2回反復すると思いますよね?

答えて

0

slidingIteratorを作成するので、マッピングは「安い」でしょう。 slidingmapの間では、余分な.toArrayがあります。それは、あなたがお返事のため

val windowedInput = windowedInputIt.toArray 
+0

感謝を書き込むことによって、配列にそのイテレータを評価することができ

val windowedInputIt = input. sliding(firstBigDivi,firstBigDivi) //First, a big division .map(arr=>arr.sliding(windowDuration,windowStep).toArray) 

をすれば良いです!私が正しく理解していれば、コンバージョンのみ保存できますか? 2番目の質問はどうですか?私は本当に2回反復する必要がありますか? – PaNh

+0

配列の配列を作成したいので、内部構造の上に1回、外側構造の上に1回反復できない方法はありません。より多くの操作をどのように節約できるかはわかりません。もちろん、配列を持っている場合は、滑らかにマップしたり、手作業で繰り返したりすることなく、出力配列を命令的に構築することができます。 –

+0

あなたは手で反復するのが安価かもしれないと思いますか? – PaNh

関連する問題