如何根据名称从List中获取元素?

时间:2018-04-19 11:13:40

标签: scala list apache-spark

我有一个包含子路径的路径,每个子路径包含文件

      path="/data"

我实现了tow函数来从每个子路径获取csv文件

      def getListOfSubDirectories(directoryName: String): Array[String] = {
  (new File(directoryName))
    .listFiles
    .filter(_.isDirectory)
    .map(_.getName)
}
      def getListOfFiles(dir: String, extensions: List[String]): List[File] = {
  val d = new File(dir)
  d.listFiles.filter(_.isFile).toList.filter { file =>
    extensions.exists(file.getName.endsWith(_))
  }
}

每个子路径包含5个csv文件:contextfile.csv,datafile.csv,datesfiles.csv,errors.csv,testfiles所以我的问题是我将在单独的数据帧中使用每个文件如何获取文件名例如,对于正确的数据帧,我想获取与上下文有关的文件的名称(即contextfile.csv)。我这样工作但是对于每次迭代,逻辑和列表中的排名改变

  val dir=getListOfSubDirectories(path)
  for (sup_path <- dir)
   { val Files = getListOfFiles(path + "//" + sup_path, List(".csv"))
  val filename_context = Files(1).toString
  val filename_datavalue = Files(0).toString
  val filename_error = Files(3).toString
  val filename_testresult = Files(4).toString

}

任何帮助和感谢

1 个答案:

答案 0 :(得分:0)

我只用一个简单的过滤器来解决它

  val filename_context = Files.filter(f =>f.getName.contains("context")).last.toString
  val filename_datavalue = Files.filter(f =>f.getName.contains("data")).last.toString
  val filename_error = Files.filter(f =>f.getName.contains("error")).last.toString
  val filename_testresult = Files.filter(f =>f.getName.contains("test")).last.toString