Scala 是不是有一种按列拆分 CSV 的好方法?

Posted

技术标签:

【中文标题】Scala 是不是有一种按列拆分 CSV 的好方法?【英文标题】:Does Scala have a nice way to split CSV by column?Scala 是否有一种按列拆分 CSV 的好方法? 【发布时间】:2011-10-24 23:18:28 【问题描述】:

我有一个带有列标题的 csv。一列标题是“日期”。如果我想生成两个 CSV,分为 DATE 之前和 DATE 之后/包括 DATE,有没有办法在没有程序循环的情况下做到这一点?我注意到大多数列表函数都适合按行过滤。

【问题讨论】:

【参考方案1】:

我假设您已经将数据解析为如下内容:

val myDoc = List(
  List("ID", "NAME", "DATE", "DESC"),
  List("1", "a", "1990", "x"), 
  List("2", "b", "1991", "y")
)

现在我们可以使用splitAtunzip 将列表分开。请注意,我对数据做了很多假设——在实际代码中,我们想要检查列表是否为非空,并且标题实际上包含 "DATE" 列。

def split(doc: Seq[Seq[String]]) = 
  val i = doc.head.indexOf("DATE")
  doc.map(_.splitAt(i)).unzip

我们可以将它应用到我们的测试数据中:

scala> val (b, a) = split(myDoc)
b: List[Seq[String]] = List(List(ID, NAME), List(1, a), List(2, b))
a: List[Seq[String]] = List(List(DATE, DESC), List(1990, x), List(1991, y))

我觉得这很合理。

【讨论】:

其实这有点好笑,因为 OP 询问了 CSV,而且看起来(因为标记了答案)它与 CSV 无关 :-) 也许 Google2 会处理这样的错误标志。

以上是关于Scala 是不是有一种按列拆分 CSV 的好方法?的主要内容,如果未能解决你的问题,请参考以下文章

sh 按列值拆分CSV

Scala:我如何根据行数将数据帧拆分为多个 csv 文件

C# 是不是有一种存储多个对象并且仍然易于访问的好方法 [关闭]

一个excel按列拆分多个sheet

按列拆分查询结果的最佳实践

使用 Bash 按列拆分命令输出?