我想从一个巨大的csv文件中读取,通过将值拆分为",“将每一行分配给数组。最后,我的目标是有一个数组(行)来保存这些值。到目前为止我的代码是这样的:
val file = "/home/tolga/Desktop/mics18-2/big-data/homework2/covtype.csv/data-10.csv"
for(line <- Source.fromFile(file).getLines){
val seriesArray : Array = line.split(",").map(_.toInt).distinct /*error on this line*/
println(line)
}发布于 2018-03-23 20:46:56
对于我的测试文件,我必须做一些调整:
for(line <- Source.fromFile(file).getLines){
val seriesArray : Array[Int] = line.split (",").filter (_.trim.size > 0).map (_.toInt).distinct
println(line) }最后两个可能与您的文件无关。
不,这不会产生2 2dim数组。它只在一行上操作,将其赋值给seriesArray,这是一个单一的数组,并覆盖每个行的值。
保留所有的线条
scala> val seriesArray : Array[Array[Int]] = (
| for (line <- Source.fromFile(file).getLines) yield
| line.split (",").filter (_.trim.size > 0).map (_.toInt).distinct).toArray这表明,我的测试数据:
seriesArray: Array[Array[Int]] = Array(Array(), Array(1, 49, 999), Array(), Array(1, 49, 1000), Array(), Array(1, 50, 999), Array(), Array(1, 50, 1000), Array(), Array(1, 51, 999), Array(), Array(1, 51, 1000), Array(), Array(2, 49, 999), Array(), Array(2, 49, 1000), Array(), Array(2, 50, 999), Array(), Array(2, 50, 1000), ...对于打印,您需要有点耐心,因为print语句返回的是Unit,而不是数据。
发布于 2018-03-25 17:47:32
对于基于火花的解决方案,最终结果将是一个RDD[Array[Int]],而不是严格地说是一个“二维数组”,因为RDD是一个分区的、分布式的、不可变的“数组”的抽象。
将CSV文件加载到RDD中很简单,但关键在于细节。给定一个简单的文件,例如这个data.csv文件:
1,1,3,2
2,22,3,18
3,3,12,25下列措施将起作用:
val rdd = sc.textFile("data.csv").map(_.split(",").map(_.toInt))但是,如果输入必须以某种方式“清除”(例如删除标题行、修剪值、筛选出非整数等)您必须使用RDD的方法(如filter和map )来完成此操作。如果您在这样的清理中遇到特定的问题,搜索特定的问题或者在代码中发布一个新的问题,您看到的数据就是您看到的错误。
https://stackoverflow.com/questions/49457875
复制相似问题