Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala中将CSV列读入向量_Scala - Fatal编程技术网

如何在Scala中将CSV列读入向量

如何在Scala中将CSV列读入向量,scala,Scala,我有一个CSV文件: 我想创建这样的地图: ((A -> Vector(10.75,10.75,10.47,...,..), B-> Vector(164.56,164.99,160.98,...), C -> Vector(7.1,7.4,9.4,...,), D - > Vector(14.2,14.8,18.8,...,..)) 这就是我目前所拥有的(不多): 此代码打印以下内容: 我的向量包含行,我需要我的向量包含列,而不是CSV中的行。一旦您阅读了行,并有

我有一个CSV文件:

我想创建这样的地图:

((A -> Vector(10.75,10.75,10.47,...,..), B-> Vector(164.56,164.99,160.98,...), C -> Vector(7.1,7.4,9.4,...,), D - > Vector(14.2,14.8,18.8,...,..))
这就是我目前所拥有的(不多):

此代码打印以下内容:


我的向量包含行,我需要我的向量包含列,而不是CSV中的行。

一旦您阅读了行,并有类似的内容
val行:Seq[Seq[String]=???
,只需执行

   val columns = "ABC..."
   lines
     .iterator
     .map { row => columns.zip(row) }
     .groupBy { _._1 }
     .mapValues { _._2 }
     .toMap

如果出于某种奇怪的原因,您希望它特别是
向量
,那么只需将
添加到
之后的[Vector]
。\u 2

首先,请不要将重要的文本信息作为图像发布。我们无法从图像复制粘贴

我创建了一个较小的测试文件,如下所示:

A,B,C
10.75,10.75,10.47
164.56,164.99,160.98
7.1,7.4,9.4
14.2,14.8,18.8
有了它,我运行了这段代码

util.Using(io.Source.fromFile("train3.csv")){
  _.getLines()
   .map(_.split(","))
   .toVector
   .transpose
   .groupMapReduce(_.head)(_.tail.map(_.toFloat))(_++_)
}  //file is auto-closed

//res0: Try[Map[String,Vector[Float]]] =
// Success(Map(A -> Vector(10.75, 164.56, 7.1, 14.2)
//           , B -> Vector(10.75, 164.99, 7.4, 14.8)
//           , C -> Vector(10.47, 160.98, 9.4, 18.8)))

如果无法打开文件,或者行长度不一致,或者无法转换数字字符串,这将返回
Failure()
。(这可能不是必需的。我只是认为这是可取的。)

嗨!非常感谢你的回答。我要查找的结果包含向量中的列,例如:A->Vector(10.75,10.75,10.47,…)、B->Vector(164.56164.99160.98,…)、C->Vector(7.1,7.4,9.4,…)、D->Vector(14.2,14.8,18.8,…)您的结果显示了向量中的每一行,这是我设法做到的。我将确保下次不会将代码作为照片发布。请再次查看@babilon1210。由于我无法从您的图像复制粘贴,因此我从您发布的
Map
中进行了复制粘贴,并将其向下编辑为数据。因此,我发布的原始输入文件不是您所拥有的输入文件,但它表明代码完全符合您的要求。非常感谢!效果很好!
util.Using(io.Source.fromFile("train3.csv")){
  _.getLines()
   .map(_.split(","))
   .toVector
   .transpose
   .groupMapReduce(_.head)(_.tail.map(_.toFloat))(_++_)
}  //file is auto-closed

//res0: Try[Map[String,Vector[Float]]] =
// Success(Map(A -> Vector(10.75, 164.56, 7.1, 14.2)
//           , B -> Vector(10.75, 164.99, 7.4, 14.8)
//           , C -> Vector(10.47, 160.98, 9.4, 18.8)))