代码之家  ›  专栏  ›  技术社区  ›  samba

scala-如何将文件中的数据映射成不同的格式?

  •  0
  • samba  · 技术社区  · 6 年前

    我正在学习scala的基础知识,并编写了一个代码来读取csv文件中的数据,并用逗号将其拆分。现在我正试图解析数据,以便得到一个类似于此映射的映射[double,string]

    所以我决定把它 Map[Double, String] 因为我的文件包含两个字段(saleid(double)和saletype(string))。但是我得到一个错误(类型为map[nothing,nothing]的表达式不符合预期的类型map[double,string])。

    我在这里犯了什么错?我以为地图 line(0).toDouble, line(1).toString 将生成预期的映射[double,string]

    val stream : InputStream = getClass.getResourceAsStream("/sales.csv")
      val lines: Iterator[String] = scala.io.Source.fromInputStream(stream).getLines
      val map: Map[Double, String] = lines
        .map(_.split(",")
        .map(line => (line(0).toDouble, line(1).toString)))
        .toMap
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Tim    6 年前

    你的括号有点错,应该是这样的:

    val map: Map[Double, String] = lines
      .map(_.split(",")) // <- Added bracket
      .map(line => (line(0).toDouble, line(1).toString)) // <- Removed bracket
      .toMap
    
        2
  •  0
  •   Chaitanya    6 年前

    假设你的输入格式是

    val input = List("1.0,a","2.0,b","3.0,c","4.0,d")
    

    然后编写函数

    input.map(x => (x.split(",")(0).toDouble,x.split(",")(1) )).toMap
    

    将以以下形式输出

    scala.collection.immutable.Map[Double,String] = Map(1.0 -> a, 2.0 -> b, 3.0 -> c, 4.0 -> d)