簡體   English   中英

如何在scala中讀取文件並拆分

[英]how to read file and split in scala

如果我有一個文件(如csv,txt ...)。

在此處輸入圖片說明

我希望得到兩個數組

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)

在Scala中執行此操作的理想方法是什么?

您可以一次性獲得兩個數組,因此無需兩次遍歷數據:

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將為您完成轉換。

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)

@Vitaliy Kotlyarenko的答案類似,但不使用Spark等第三方(如果您的數據很大,Spark會很不錯,否則會造成過度殺傷):

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM