Spark:spark.files vs文件

时间:2019-04-19 16:16:43

标签: scala apache-spark

文档中有spark.files的文字:

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

--files中的spark-submit一样吗?

我尝试将--conf spark.files#一起使用来重命名,但似乎没有用。

有人知道吗?

1 个答案:

答案 0 :(得分:0)

您应该尝试使用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中指定的文件通过Client.scala的 deploy 功能复制到执行程序节点中,其中片段得到了正确处理。