将 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]]] 

我在模板中使用idweight

【问题讨论】:

那么到现在为止你尝试了什么? 另外,你提到了 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 中的地图列表的主要内容,如果未能解决你的问题,请参考以下文章

将 Scala 中的列表转换为 Python 列表或数据帧

将数据转换为 spark scala 中的类对象列表

在 Scala 中将 JSON 转换为 CSV?

如何将地图数据转换为颤动中的对象列表?

将 .CSV 文件转换为 Python 中的列表

Lat,Lon,使用Python将CSV值转换为栅格地图