2016-04-24 15 views
-1

ファイルがある場合(csv、txtなど)。私が望むファイルを読み込み、スカラーで分割する方法

enter image description here

Scalaでこれを実行するための理想的な方法は何な

Array(Array(1.0,2.0),Array(4.0,5.0),Array(7.0, 8.0),Array(10.0,11.0),Array(13.0,14.0)) 

Array(3.0, 6.0, 9.0, 12.0, 15.0) 

などの2つの配列を取得しますか?

+0

何をしますか?あなたはそのデータで何をしたいですか? –

+0

私はcsvまたはtxtファイルを読み込み、これらのデータを分割したいと考えています。 そして、私は上記のような2つの配列を取得したいと思います。 –

+1

問題を自分で解決するための努力のわずかな打撃を表示することなく、「やる方法」のような質問をするのは(少なくとも)悪い味です。これは「私の自宅で無料で仕事をする」サイトではなく、「自分が行っていることをより良くする」ためのリソースです。 – Dima

答えて

1
@Vitaliy Kotlyarenkoの答えに似

が、スパークのようなサードパーティ(スパークは、あなたのデータが大きい場合素晴らしいですが、それ以外はやり過ぎ)を使用せず:

val lines: Iterator[String] = scala.io.Source.fromFile("txt.csv").getLines() 
val matrix: Array[Array[Double]] = lines.map(_.split(",").map(_.trim.toDouble)).toArray 
val twoFirstColumns: Array[Array[Double]] = matrix.map(_.take(2)) 
val thirdColumn: Array[Double] = matrix.map(_(2)) 
1
val rdd = sc.textFile("1.csv").map(_.split(',').map(_.trim().toDouble)) 

rdd.map(_.take(2)).collect() 
res0: Array[Array[Double]] = Array(Array(1.0, 2.0), Array(4.0, 5.0), Array(7.0, 8.0), Array(10.0, 11.0), Array(13.0, 14.0)) 

rdd.map(_(2)).collect() 
res2: Array[Double] = Array(3.0, 6.0, 9.0, 12.0, 15.0) 
+1

OPの質問にSparkが表示されませんか? –

+0

おっと、スパークとスカラタグが開いている2つのブラウザタブがあるときに起こります。 –

1

をあなたには両方の配列を取得することができますあなたは2倍のデータを横断する必要がないように1は、行く:

val (first, second) = { 
    io.Source.fromFile(name).getLines 
    .map(_.split(",").map(_.toDouble)) 
    .foldRight(Seq.empty[Array[Double]] -> Seq.empty[Double]) { 
     case (Array(x, y, z), (as, bs)) => (Array(x, y) +: as, z +: bs) 
    } 
} 

今、あなたは二つのリストではなく、その配列で終わります。あなたにとって重要なのは、first.toArraysecond.toArrayです。

+0

あなたのコードはコンパイルされません –

+0

擬似コードと考えています:)私は私の携帯電話から投稿していますので、注意してください。さらに、このような質問に対する答えとして完全な作業コードを与えることは、私にはうってつけではありません。ポスターを使って誰かに仕事をさせる方法を探しているだけです。だから、おそらく、私が作ったいくつかのタイプミスが最高です。私はそれを概説したので、意図と一般的なアプローチが明確であることを願っています。 @Łukasz – Dima

+0

よろしく、私はコンパイルするためのコードを更新しました、あなたが気にしないことを願っています。 –

関連する問題