Модульное тестирование, если файл существует в локальной файловой системе через Spark - PullRequest
1 голос
/ 27 марта 2019

Я могу успешно проверить приведенный ниже код в кластере EMR с помощью искры. Но я не могу написать пример модульного теста с локальной файловой системой в IntelliJ. Может ли кто-нибудь помочь мне с тем, как указать локальную файловую систему в intelliJ в коде ниже.

Работа в кластере EMR

FileSystem.get(new URI("s3n://bucket"), sc.hadoopConfiguration).exists(new Path("/path_to_check"))

Не работает в IntelliJ. Всегда возвращает false

FileSystem.get(new URI("file://somelocal/bucket"), sc.hadoopConfiguration).exists(new Path("/some/local/path_to_check"))

1 Ответ

0 голосов
/ 27 марта 2019

Вы можете использовать org.apache.hadoop.fs.FileSystem

def isFileExists(path: String, pattern: String)(implicit spark: SparkSession): Boolean = {
    val fixedPath = path.stripSuffix("/") + "/"
    val conf = spark.sparkContext.hadoopConfiguration
    val fs = FileSystem.get(new URI(path), conf)
    val reg = new Regex(pattern)

    try {
      val files = fs.listFiles(new Path(fixedPath), true)
      var flag = false
      // hack because listFiles returns RemoteIterator which not an inheritor of java.util.Iterator
      while (files.hasNext) {
        reg.findFirstMatchIn(files.next().toString) match {
          case Some(_) => flag = true
          case None =>
        }
      }
      flag
    } catch {
      // if dir doesn't exist
      case _: java.io.FileNotFoundException => false
      case e: Throwable => throw e
    } finally {
      fs.close()
    }
  }

, он работает с s3, hdfs и локальной файловой системой, и вы можете написать модульные тесты

...