如果我有一個文件(如csv,txt ...)。如何讀取文件和拆分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)
是什麼在斯卡拉做到這一點的理想方式?
如果我有一個文件(如csv,txt ...)。如何讀取文件和拆分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)
是什麼在斯卡拉做到這一點的理想方式?
到@Vitaliy Kotlyarenko的答案,但沒有使用第三方像星火類似(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))
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)
我在OP的問題中沒有看到Spark? –
oops,當您有2個瀏覽器選項卡打開spark和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.toArray
和second.toArray
將爲你做轉換。
你的代碼不會編譯 –
是的,認爲它僞代碼:)我從我的手機發布,所以...警告虛空。此外,我並不認爲完整的工作代碼是對這樣的問題的答案,而海報顯然只是在尋找一種讓他人爲他們工作的方式。所以,也許,我犯的一些錯別字是最好的。我希望,儘管我概述了這個意圖和一般的方法。 @Łukasz – Dima
好吧,我更新了代碼供您編譯,希望您不介意。 –
做什麼?你想對數據做什麼? –
我想讀取csv或txt文件並拆分這些數據。 我希望得到像上面那樣的兩個數組。 –
如果你沒有絲毫的努力去解決這個問題,那麼提出「如何做X」這樣的問題(至少)是一種不好的滋味。這不是「做我的家免費工作」網站,而是「幫助我變得更加擅長我的工作」資源。 – Dima