#amazon-web-services #apache-spark #amazon-s3 #apache-spark-sql #hdfs
#amazon-web-services #apache-spark #amazon-s3 #apache-spark-sql #hdfs
Вопрос:
Я могу успешно протестировать приведенный ниже код в кластере EMR через spark. Но я не могу написать модульный тестовый пример с локальной файловой системой в 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:
Вы можете использовать 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 и локальной файловой системой, и вы можете писать модульные тесты