首页 > 解决方案 > Spark:spark.files 与文件

问题描述

在文档中有spark.files文字:

Comma-separated list of files to be placed in the working directory of each executor. Globs are allowed.

--files和from一样spark-submit吗?

我尝试使用--conf spark.fileswith#进行重命名,但似乎没有用。

有人会知道吗?

标签: scalaapache-spark

解决方案


您应该尝试使用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。

通过 Client.scala 的部署功能将指定的文件--files, spark.yarn.dist.files复制到 executors 节点中,其中片段被正确处理。


推荐阅读