【问题标题】:Removing a certain row in csv file that contains a comma in scala?在scala中删除包含逗号的csv文件中的某一行?
【发布时间】:2020-03-27 10:25:09
【问题描述】:

我有一个名为 data.csv 的 csv 文件:

Name、Animal 和 Total 是文件的标题

Name    Animal   Total
Ann      Fish      6
Bob      Cat       4
Jim    Dog, Cat    5

如果任何单元格包含逗号,我想删除该行,因此结果是这样的:

Name    Animal   Total
Ann      Fish      6
Bob      Cat       4

这是我在 scala 中尝试做的事情:

val data = sc.textFile("file:/home/user/data.csv")
val new_data = data.filter(x => x.contains(","))

不幸的是,这段代码没有产生我想要的结果。我能做些什么?非常感谢任何帮助。

【问题讨论】:

    标签: scala apache-spark-sql rdd


    【解决方案1】:

    最初,如果您的输入数据是csv,那么对于这种情况,您将始终拥有truex.contains(",")

    因此,使用.textFiledata 上的每个项目都将是您文件中的一行。假设您的源文件将用逗号 (,) 拆分列表中的每个项目,您可以执行以下操作:

    val new_data = data.filter(x => x.split(",").count() > 3) // where: 3 is the ideal scenario.
    

    【讨论】:

      【解决方案2】:

      这是一个很好的方法:

       def readCsv(filePath: String): List[List[String]] = {
      
              val bufferedReader = Source.fromFile(filePath)
              bufferedReader.getLines
                .drop(1)
                .map { line =>
                  val row = line.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1).toList
                  row
                }
                .toList
            }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-23
        • 2023-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多