Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 通过Spark作业服务器运行Mlib_Scala_Hadoop_Apache Spark Mllib_Spark Jobserver_Bigdata - Fatal编程技术网

Scala 通过Spark作业服务器运行Mlib

Scala 通过Spark作业服务器运行Mlib,scala,hadoop,apache-spark-mllib,spark-jobserver,bigdata,Scala,Hadoop,Apache Spark Mllib,Spark Jobserver,Bigdata,我正在练习使用spark网站提供的在线资源开发示例模型。我设法创建了模型,并使用Spark Shell为样本数据运行它,但是如何在生产环境中实际运行模型呢?是否通过Spark作业服务器 import org.apache.spark.mllib.classification.SVMWithSGD import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.mllib.linalg.Vectors

我正在练习使用spark网站提供的在线资源开发示例模型。我设法创建了模型,并使用Spark Shell为样本数据运行它,但是如何在生产环境中实际运行模型呢?是否通过Spark作业服务器

import org.apache.spark.mllib.classification.SVMWithSGD
import org.apache.spark.mllib.regression.LabeledPoint  
import org.apache.spark.mllib.linalg.Vectors

val data = sc.textFile("hdfs://mycluster/user/Cancer.csv")
val parsedData = data.map { line =>
  val parts = line.split(',')
  LabeledPoint(parts.last.toDouble,     Vectors.dense(parts.take(9).map(_.toDouble)))
}
var svm = new SVMWithSGD().setIntercept(true)
val model = svm.run(parsedData)
var predictedValue = model.predict(Vectors.dense(5,1,1,1,2,1,3,1,1))
println(predictedValue)
当我在spark shell中运行上面的代码时,它工作得非常完美,但我不知道如何在生产环境中实际运行该模型。我试图通过spark jobserver运行它,但出现错误

curl -d "input.string = 1, 2, 3, 4, 5, 6, 7, 8, 9" 'ptfhadoop01v:8090/jobs?appName=SQL&classPath=spark.jobserver.SparkPredict'

我确信这是因为我正在传递一个字符串值,而程序希望它是向量元素,有人能指导我如何实现这一点吗。这也是生产环境中传递给模型的数据的方式吗?或者是其他方式。

Spark Job server用于生产用例中,您希望设计Spark Job的管道,并且(可选)通过REST API跨作业使用SparkContext。是Spark Job server的替代品,提供类似的结构

但是,要回答您关于如何在生产环境中运行(单一)Spark作业的问题,答案是您不需要第三方库。您只需要构造一个SparkContext对象,并使用它来触发Spark作业。例如,对于您的代码片段,所需的只是

package runner

import org.apache.spark.mllib.classification.SVMWithSGD
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.linalg.Vectors

import com.typesafe.config.{ConfigFactory, Config}
import org.apache.spark.{SparkConf, SparkContext}
/**
 * 
 */
object SparkRunner {

  def main (args: Array[String]){

    val config: Config = ConfigFactory.load("app-default-config") /*Use a library to read a config file*/
    val sc: SparkContext = constructSparkContext(config)

    val data = sc.textFile("hdfs://mycluster/user/Cancer.csv")
    val parsedData = data.map { line =>
      val parts = line.split(',')
      LabeledPoint(parts.last.toDouble, Vectors.dense(parts.take(9).map(_.toDouble)))
    }
    var svm = new SVMWithSGD().setIntercept(true)
    val model = svm.run(parsedData)
    var predictedValue = model.predict(Vectors.dense(5,1,1,1,2,1,3,1,1))
    println(predictedValue)
  }


  def constructSparkContext(config: Config): SparkContext = {
    val conf = new SparkConf()
    conf
      .setMaster(config.getString("spark.master"))
      .setAppName(config.getString("app.name"))
    /*Set more configuration values here*/

    new SparkContext(conf)
  }


}

或者,您还可以使用spark库本身提供的spark submit脚本包装器。

spark Job server用于生产用例,您需要设计spark Job的管道,还可以(可选)通过REST API跨作业使用SparkContext。是Spark Job server的替代品,提供类似的结构

但是,要回答您关于如何在生产环境中运行(单一)Spark作业的问题,答案是您不需要第三方库。您只需要构造一个SparkContext对象,并使用它来触发Spark作业。例如,对于您的代码片段,所需的只是

package runner

import org.apache.spark.mllib.classification.SVMWithSGD
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.linalg.Vectors

import com.typesafe.config.{ConfigFactory, Config}
import org.apache.spark.{SparkConf, SparkContext}
/**
 * 
 */
object SparkRunner {

  def main (args: Array[String]){

    val config: Config = ConfigFactory.load("app-default-config") /*Use a library to read a config file*/
    val sc: SparkContext = constructSparkContext(config)

    val data = sc.textFile("hdfs://mycluster/user/Cancer.csv")
    val parsedData = data.map { line =>
      val parts = line.split(',')
      LabeledPoint(parts.last.toDouble, Vectors.dense(parts.take(9).map(_.toDouble)))
    }
    var svm = new SVMWithSGD().setIntercept(true)
    val model = svm.run(parsedData)
    var predictedValue = model.predict(Vectors.dense(5,1,1,1,2,1,3,1,1))
    println(predictedValue)
  }


  def constructSparkContext(config: Config): SparkContext = {
    val conf = new SparkConf()
    conf
      .setMaster(config.getString("spark.master"))
      .setAppName(config.getString("app.name"))
    /*Set more configuration values here*/

    new SparkContext(conf)
  }


}

或者,您也可以使用spark库本身提供的spark submit脚本包装器。

Hi sujith,非常感谢您的说明和示例代码。我相信我关于使用spark job server部署生产环境中构建的模型的推断是正确的。但我仍然有很多问题,我相信随着我对这个问题的深入,这些问题会越来越清楚。现在让我们假设我将这段代码部署为Spark Jar,并且我希望通过远程机器中的Spark Job server运行代码。任何关于如何将输入字符串作为向量传递或将字符串转换为向量的提示,我可以使用这些向量预测输出并返回结果。简言之,我怎样才能通过考试data@AsheshNairspark jobserver提供的REST api用于“管理”spark作业,因此,作业的输入不会作为参数传递给REST调用。只需要一个POST实体,它是类型安全配置格式文件;它在启动时与作业服务器的配置文件合并。@AsheshNair通常的生产场景是Spark作业所需的任何输入要么从数据库/HDFS存储读取,要么从配置文件读取。嗨,sujith,非常感谢您的说明和示例代码。我相信我关于使用spark job server部署生产环境中构建的模型的推断是正确的。但我仍然有很多问题,我相信随着我对这个问题的深入,这些问题会越来越清楚。现在让我们假设我将这段代码部署为Spark Jar,并且我希望通过远程机器中的Spark Job server运行代码。任何关于如何将输入字符串作为向量传递或将字符串转换为向量的提示,我可以使用这些向量预测输出并返回结果。简言之,我怎样才能通过考试data@AsheshNairspark jobserver提供的REST api用于“管理”spark作业,因此,作业的输入不会作为参数传递给REST调用。只需要一个POST实体,它是类型安全配置格式文件;它在启动时与作业服务器的配置文件合并。@AsheshNair通常的生产场景是,Spark作业所需的任何输入要么从数据库/HDFS存储中读取,要么从配置文件中读取。