在spark之外使用spark ML模型[hdfs DistributedFileSystem无法实例化]

时间:2017-03-28 22:48:06

标签: scala apache-spark hdfs apache-spark-ml

我一直试图跟踪博客文章:

https://www.phdata.io/exploring-spark-mllib-part-4-exporting-the-model-for-use-outside-of-spark/

在本地运行使用内置Hadoop 2.7的spark 2.1,我可以保存模型:

trainedModel.save("mymodel.model"))

但是,如果我尝试从常规scala(sbt)shell加载模型,hdfs无法加载。

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.ml.{PipelineModel, Predictor}

val sc = new SparkContext(new SparkConf().setMaster("local[1]").setAppName("myApp"))

val model = PipelineModel.load("mymodel.model")

我知道这是错误:

java.util.ServiceConfigurationError: org.apache.hadoop.fs.FileSystem: Provider org.apache.hadoop.hdfs.DistributedFileSystem could not be instantiated

实际上是否可以在不调用spark-submit或spark-shell的情况下使用spark模型?我链接的文章是我见过的唯一一个提到这种功能的文章。

我的build.sbt正在使用以下依赖项:

"org.apache.spark" %% "spark-core" % "2.1.0",
"org.apache.spark" % "spark-sql_2.11" % "2.1.0",
"org.apache.spark" % "spark-hive_2.11" % "2.1.0",
"org.apache.spark" % "spark-mllib_2.11" % "2.1.0",
"org.apache.hadoop" % "hadoop-hdfs" % "2.7.0"

在这两种情况下,我都使用Scala 2.11.8。

编辑:好的,看起来包括这是问题的根源

"org.apache.hadoop" % "hadoop-hdfs" % "2.7.0"

我删除了该行,问题就消失了

1 个答案:

答案 0 :(得分:2)

尝试:

trainedModel.write.overwrite().save("mymodel.model"))

此外,如果您的模型是在本地保存的,则可以删除配置中的hdfs。这应该可以防止火花试图实例化hdfs。