Вы должны попробовать с spark.yarn.dist.files
свойство
val spark = SparkSession
.builder()
.enableHiveSupport()
.getOrCreate()
SparkContext создается при создании объекта spark .Во время создания экземпляра SparkContext вызывается метод addFile
, если свойство spark.files
настроено для добавления файлов для загрузки на все узлы-исполнители.
def addFile(path: String, recursive: Boolean): Unit = {
val uri = new Path(path).toUri
val schemeCorrectedPath = uri.getScheme match {
case null | "local" => new File(path).getCanonicalFile.toURI.toString
case _ => path
}
val hadoopPath = new Path(schemeCorrectedPath)
....
}
Например, если значение пути равно localfile.txt # renamed.txt , hadoopPath переводится как localfile.txt% 23renamed.txt , который обрабатываетчасть после "#" как часть пути к файлу, а не как фрагмент.Таким образом, он генерирует FileNotFoundException.
Файлы, указанные в --files, spark.yarn.dist.files
, копируются в узел исполнителей функцией deploy Client.scala, где фрагменты обрабатываются правильно.