【问题标题】:Loading csv files with wildcards to match a pattern使用通配符加载 csv 文件以匹配模式
【发布时间】:2020-01-31 10:24:42
【问题描述】:

我有 24 个 csv 文件,其中包含 0 到 23 的名称示例 hyper01.csv , hyper02.csv,....,hyper23.csv 。但我只想使用通配符加载 08 到 15 的文件

目前我正在使用 folder_name/*{08-15} 但它不工作我正在使用 spark

【问题讨论】:

  • 我正在尝试这个 folder_name/*{08,15}*.csv 这是什么问题..我也需要使用通配符而不是任何代码来加载它

标签: regex csv apache-spark filepath


【解决方案1】:

如果你使用的是 scala,你可以试试这个:

  def getPaths(dir: String): List[String] = {
    val file = new File(dir)
    file.listFiles.filter(_.isFile)
      .filter(_.getName.startsWith("hyper"))
      .filter(s=>{
        val index = s.getName.replace("hyper", "")
          .replaceFirst("0", "")
          .replaceAll("\\.(.*)","")
          .toInt
        index >= 8 && index <= 15
      })
      .map(_.getPath).toList
  }

  val filesDirectory = "C:\\Users\\user\\hyper"
  getPaths(filesDirectory).foreach(println(_))

  val df = spark.read.csv(getPaths(filesDirectory):_*)

输出:

C:\Users\user\hyper\hyper08.csv
C:\Users\user\hyper\hyper15.csv

【讨论】:

    【解决方案2】:

    Scala 小函数可用于获取所需文件:

    def getDirs(root: String, start: Int, end: Int): Seq[String] = {
      (start to end).map(v => f"$root/hyper$v%02d.csv")
    }
    
    // usage
    spark.read.parquet(getDirs("folder_name", 8, 15): _*)
    

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多