将 CSV 数据转换为 scala 中的地图列表
Posted
技术标签:
【中文标题】将 CSV 数据转换为 scala 中的地图列表【英文标题】:Convert CSV data to List of maps in scala 【发布时间】:2021-09-14 13:28:01 【问题描述】:我的 CSV 看起来像这样
id | weight |
---|---|
1 | 38 |
4 | 98 |
4 | 66 |
6 | 89 |
我想将我的输出生成到这些地图的列表中:
Map("id"->1,"weight"->38)
Map("id->4,weight"->98)
我正在使用 gatling pebble 模板,我尝试从 cCSV 读取记录,如下所示:
val records=csv(my.csv).readRecords()
然后从这些记录中我无法将其转换为所需的地图。
以这种格式获取地图的鹅卵石模板:
Iterator[Map[String],List[Map[String][String]]]
我在模板中使用id
和weight
。
【问题讨论】:
那么到现在为止你尝试了什么? 另外,你提到了 Gatling,你想要一种在 Gatling 上读取 CSV 的方式还是普通的 Scala 方式? 除了上述 cmets,您是否还可以扩展预期的数据结构,如果它是正确的 - 您正在尝试创建多个映射(每行 1 个,键作为 id 和权重。不应该更符合逻辑的 DS 是 Map(id->weight) 或 List(id:id,weight:weight) @Filip :是的,我正在使用 gatling pebble 模板,我试图从 csv 中读取记录,如下所示:val records=csv(my.csv).readRecords() 然后从这个记录中我是无法将其转换为所需的地图。 @JahnaviPaliwal:实际上我使用的是 pebble 模板,它采用这种格式的地图:Iterator[Map[String],List[Map[String][String]]],我使用 id 和 weight我的模板。 【参考方案1】:假设您的 CSV 文件如下所示并位于 data.csv
:
id,weight
1,38
4,98
4,66
6,89
minimal 解析器可能如下所示:
object Main extends App
val separator = ","
val lines = io.Source.fromFile("data.csv").getLines()
val headers = lines.next().split(separator)
val result = for
line <- lines
values = line.split(separator)
mapping = headers.zip(values).toMap
yield mapping
println(result.toList)
输出:
List(Map(id -> 1, weight -> 38), Map(id -> 4, weight -> 98), Map(id -> 4, weight -> 66), Map(id -> 6, weight -> 89))
在大多数情况下,使用库可能是一个更好的主意。
【讨论】:
非常感谢您的回答,这可行,但不适合卵石模板,我正在尝试创建该特定地图。 val feeder=iterator[Map[String],List[Map[String][String]]] - 你知道如何将上面的地图转换成这张地图吗? @surbhikhare 没有参考示例很难提供帮助,它显示了您正在尝试做什么 - 您应该创建另一个问题,以反映 Pebble 上下文中的当前问题(即假设这个部分问题已解决;即读取 CSV 配置)。顺便说一句,将此标记为“已接受”可能是个好主意。 当然我会接受这个,作为完整的参考,我正在使用这个:***.com/questions/68182150/… 我想我错过了解释一个提示点:val mapValuesFeeder = Iterator.continually(Map("mapValues" -> List( Map("id" -> "1", "weight" -> "10"), Map("id" -> "2", "weight" -> "20"), ))) ,我应该问:如何从 csv 填充这些 id 和权重以上是关于将 CSV 数据转换为 scala 中的地图列表的主要内容,如果未能解决你的问题,请参考以下文章