gpt4 book ai didi

apache-spark - Spark 提交管道模型

转载 作者:行者123 更新时间:2023-12-02 18:30:33 25 4
gpt4 key购买 nike

我有一个运行在docker上的Apache Spark集群(1个主服务器+ 1个工作器),我可以使用适合管道的spark-submit提交作业,然后将其保存(PipelineModel.save(path)).该文件恰好保存在本地计算机上,我执行了spark-submit命令。

当我想加载PipelineModel并将其用于预测时,尝试部署生产代码时会出现问题。我无法传递包含已保存文件的文件夹。

这是我用来提交工作的代码:

spark-submit --class ch.supsi.isteps.Main --master spark://172.17.0.1:7077 --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.2.0 --files=test/aFolder ./STR-0.1-alpha.jar --mode=production --file=test/aFolder
where --mode=production --file=test/aFolder是我程序的参数

我已经尝试使用 --files,但是它不接受文件夹。我想避免在所有工作程序节点中复制模型。

编辑

该问题与HDFS和Docker有关。作为备份解决方案,我们避免在Docker内部使用spark-cluster,而在Docker内部切换到本地模式。这样可以保存和检索文件而不会出现问题。如果您映射文件夹(docker-compose->卷),您甚至不需要传递文件,因为它们已被映射到您的容器

最佳答案

I already tried to use --files, but it doesn't accept folders



选项1:
SparkContext具有以下方法来添加可以循环播放的文件和文件夹中的文件列表,然后添加它们。
/**
* Add a file to be downloaded with this Spark job on every node.
*
* If a file is added during execution, it will not be available until the next TaskSet starts.
*
* @param path can be either a local file, a file in HDFS (or other Hadoop-supported
* filesystems), or an HTTP, HTTPS or FTP URI. To access the file in Spark jobs,
* use `SparkFiles.get(fileName)` to find its download location.
*/
def addFile(path: String): Unit = {
addFile(path, false)
}

如上所述... SparkFiles.get(fileName)您可以获取文件名

否则 SparkFiles具有 getRootDirectory来获取您已添加文件的文件夹,您可以访问它们。
/** 
* Get the root directory that contains files added through `SparkContext.addFile()`.
*/
def getRootDirectory(): String =
SparkEnv.get.driverTmpDir.getOrElse(".")

}

要不然

使用 sparkcontext.listFiles,您可以按顺序获取文件列表。

选项2:如果要继续使用 --files选项,则可以使用相同的方法遵循我的答案 submitting multiple jars from a folder,也可以从由定界符分隔的文件夹中添加多个文件。

希望这可以帮助!

关于apache-spark - Spark 提交管道模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47325428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com