我是新来的火花,能请您帮忙吗? 以下用于进行逻辑回归的简单管道会产生异常: 编码: 打包pipeline.tutorial.com
import org.apache.log4j.Level
import org.apache.log4j.Logger
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.evaluation.BinaryClassificationEvaluator
import org.apache.spark.ml.feature.RFormula
import org.apache.spark.ml.tuning.ParamGridBuilder
import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.tuning.TrainValidationSplit
object PipelineDemo {
def main(args: Array[String]) {
Logger.getLogger("org").setLevel(Level.ERROR)
val conf = new SparkConf()
conf.set("spark.master", "local")
conf.set("spark.app.name", "PipelineDemo")
val sc = new SparkContext(conf)
val spark = SparkSession.builder().appName("PipelineDemo").getOrCreate()
val df = spark.read.json("C:/Spark-The-Definitive-Guide-master/data/simple-ml")
val rForm = new RFormula()
val lr = new LogisticRegression().setLabelCol("label").setFeaturesCol("features")
val stages = Array(rForm, lr)
val pipeline = new Pipeline().setStages(stages)
val params = new ParamGridBuilder().addGrid(rForm.formula, Array(
"lab ~ . + color:value1",
"lab ~ . + color:value1 + color:value2")).addGrid(lr.elasticNetParam, Array(0.0, 0.5, 1.0)).addGrid(lr.regParam, Array(0.1, 2.0)).build()
val evaluator = new BinaryClassificationEvaluator()
.setMetricName("areaUnderROC")
.setRawPredictionCol("prediction")
.setLabelCol("label")
val tvs = new TrainValidationSplit()
.setTrainRatio(0.75)
.setEstimatorParamMaps(params)
.setEstimator(pipeline)
.setEvaluator(evaluator)
val Array(train, test) = df.randomSplit(Array(0.7, 0.3))
val model = tvs.fit(train)
val rs = model.transform(test)
rs.select("features", "label", "prediction").show()
}
}
//结束代码。
代码从spark-shell正常运行 当将其编写为spark应用程序(使用eclipse scala ide)时,会出现错误: 引起原因:java.io.NotSerializableException:scala.runtime.LazyRef
谢谢。
答案 0 :(得分:1)
我通过从构建路径中删除scala库来解决它,为此,右键单击scala库容器>构建路径>从构建路径中移除 虽然不确定根本原因。
答案 1 :(得分:0)
可以通过将项目中的 scala 版本更改为 2.12.8 或更高版本来解决此错误。 Scala 2.12.8 可以工作并且非常稳定。您可以通过转到项目结构来更改此设置(在 Intellij 中,您可以按“Ctrl+alt+shift+S”进行更改)。转到全局库,在那里您必须使用 - 符号删除旧的 Scala 版本,并从 + 符号添加新的 Scala 版本,即 2.12.8 或更高版本。