如何在Scala中对具有多列的数据集进行排名?

时间:2016-04-25 07:10:35

标签: scala

我有这样的数据集,我从csv文件中获取但是如何 存储在Scala中进行处理。

+-----------+-----------+----------+
| recent    | Freq      | Monitor  |
+-----------+-----------+----------+
|        1  |       1234|    199090|
|        4  |       2553|    198613|
|        6  |       3232 |   199090|
|        1  |       8823 |   498831|
|        7  |       2902 |   890000|
|        8  |       7991 |   081097|
|        9  |       7391 |   432370|
|        12 |       6138 |   864981|
|        7  |       6812 |   749821|
+-----------+-----------+----------+

实际上我需要对数据进行排序并对其进行排名。 我是Scala编程的新手。 感谢

2 个答案:

答案 0 :(得分:0)

在这里回答你的问题是解决方案,这段代码读取csv并按第三列排序

object CSVDemo extends App {
    println("recent, freq, monitor")
    val bufferedSource = io.Source.fromFile("./data.csv")
    val list: Array[Array[String]] = (bufferedSource.getLines map { line => line.split(",").map(_.trim) }).toArray
    val newList = list.sortBy(_(2))
    newList map { line => println(line.mkString(" ")) }
    bufferedSource.close
}

您阅读该文件并将其解析为Array[Array[String]],然后按第三列排序,然后打印

答案 1 :(得分:0)

这里我使用列表并尝试一次规范化每个列,然后连接它们。是否有任何其他方式迭代列和标准化它们。对不起,我的编码很基本。

val col1 = newList.map(line => line.head)

val mi = newList.map(line => line.head).min

val ma = newList.map(line => line.head).max  

println("mininumn value of first column is " +mi)
println("maximum value of first column is : " +ma)

// calculate scale for the first column

val scale = col1.map(x => math.round((x.toInt - mi.toInt) / (ma.toInt - mi.toInt)))

println("Here is the normalized range of first column of the data") 

scale.foreach(println)