如何使用Scala从CSV文件中删除列

时间:2016-05-10 15:34:47

标签: scala csv rdd

如果我有以下CSV格式:

Id,name,number
1,sam,023
2,ron,287

但是我想这样做只是将列标题作为参数传递,在这种情况下" name":

Id,number
1,023
2,287

我如何在Scala中执行此操作?

2 个答案:

答案 0 :(得分:0)

这需要一些争论,但以下应该这样做。

scala> scala.io.Source.fromFile("data.csv").getLines.map(_.split(",")).map(s => s(0) + " " +  s(2)).mkString("\n")
res4: String =
Id number
1 023
2 287

答案 1 :(得分:0)

试试吧。

object ColDrop extends App {

  val Eol = "\n"


  def dropCol(col: String, csv: String, delim: Char = ',') = {

    def drop(line: Array[String], rmIndex: Int) = (line.take(rmIndex) ++ line.drop(rmIndex + 1)).mkString(delim.toString)

    val csvArr = csv.split(Eol)
    val header = csvArr.head.split(delim).map(_.trim)
    val rmIndex = header.indexOf(col)

    drop(header, rmIndex) + Eol + csvArr.tail.map { r =>
      drop(r.split(delim), rmIndex)
    }.mkString(Eol)
  }

  println(dropCol("name",
    """Id,name,number
      |1,sam,023
      |2,ron,287
    """.stripMargin))

}