我可以配置路径其中addFile(path)函数在spark中存储所有工作节点中的文件

时间:2016-05-27 06:16:10

标签: apache-spark

在spark文档中,addFile(path)函数将给定文件复制到特定位置。但实际上它不同于一个执行器。 因为该路径包含执行程序ID。 有没有办法将该路径配置为对所有执行程序保持不变。

1 个答案:

答案 0 :(得分:1)

sc.addFile(path)中的路径是驱动程序上的本地文件路径或HDFS或HTTP / HTTPS网址上的路径。

查看SparkContext

的标量

确保文件在所有执行程序上下载,并通过SparkFiles.get(fileName)提供。

以下是Learning Spark本书中的一个示例。

val distScript = "./src/R/finddistance.R"
val distScriptName = "finddistance.R"
sc.addFile(distScript)
val distances = contactsContactLists.values.flatMap(x => 
    x.map(y =>
        s"$y.contactlay,$y.contactlong,$y.mylat,$y.mylong")).pipe(Seq(SparkFiles.get(distScriptName)
    )
)

请注意闭包中的SparkFiles.get仅使用文件名部分而没有完整路径

distScript是驱动程序上具有相对路径的文件。 distScriptName只是执行程序可以与SparkFiles.get函数一起使用的文件名(不包括路径)。如果您的作业通过addFile

发送多个文件,则名称部分应该是唯一的

我们不应该真正关心所有执行者的路径是否一致。它的将由Spark在所有执行程序上提供,其中SparkFiles.get(fileName)位于您的RDD闭包函数中(在您的执行程序上执行)。