我的目标是保存一个 spark 模型,然后将其压缩,但我遇到了问题,因为 os.exists(path) 找不到刚刚创建的模型。这是代码:
...
model.write().save(model_location)
model2 = PipelineModel(PipelineModel).load(model_location) # the model is loaded
print(os.path.exists(model_location)) # prints False
shutil.make_archive(model_location, 'zip', model_location) # this fails, file not found
我认为问题的原因是这样的: os.path.exists() lies 但我仍然不知道如何修复它。显然,模型已创建,因为我可以随后将其加载到 model2 中,并且在运行结束后,包含模型的文件夹就在那里。但是,除此之外,等待文件夹创建之类的操作是行不通的。
或者可能是 spark 配置问题,我在 Ambari 集群中执行此操作,代码在我的本地机器上运行但不在本地机器上,所以我不确定问题出在哪里。
请您参考如下方法:
您的错误是假设模型将保存到本地的、符合 POSIX 的文件系统。
ML 模型使用标准 Spark SQL 实用程序保存,因此将使用默认文件系统,在正常操作下该文件系统将指向分布式文件系统,如 HDFS。
很可能您必须将模型(存储为 Parquet 文件)复制到本地文件系统,并从那里使用它,尽管从整体描述来看您更需要 How to serve a Spark MLlib model? 中描述的方法之一。
