首页 > 解决方案 > 代码在 zepplin 上运行良好,但在使用 sbt 编译后无法使用 spark-submit

问题描述

我正在使用时间序列进行股市预测。我的 spark scala 脚本在 zeppelin 上运行良好,但是在使用 sbt 编译我的脚本后,我没有得到想要的结果,而是只有空值。我还有一个关于 com.cloudera.sparkts 的未解决依赖项的问题。

导致 pb 的代码行:预期结果

val df = spark.createDataFrame(tsRdd.mapSeries { vector => {
val newVec = new org.apache.spark.mllib.linalg.DenseVector(vector.toArray.map(x => if (x.equals(Double.NaN)) 0 else x))
val arimaModel = ARIMA.fitModel(1, 0, 0, newVec)
val forecasted = arimaModel.forecast(newVec, DAYS)
new org.apache.spark.mllib.linalg.DenseVector(forecasted.toArray.slice(forecasted.size - (DAYS + 1), forecasted.size - 1))
}}.toJavaRDD).toDF("lab", "features").withColumn("featuresArr", vecToArray($"features"))

 df.select((col("lab") +: Array("f1", "f2", "f3", "f4", "f5").zipWithIndex.map { case (alias, idx) => col("featuresArr").getItem(idx).as(alias) }): _*).show

输出 :

我只有空值

标签: sbtamazon-emrapache-zeppelinarimaspark-submit

解决方案


通过重新加载插件和更新依赖项来解决一些依赖项问题。特别是当依赖问题是由于常春藤缓存引起的。

请执行下列操作:

sbt reload plugins
sbt update
sbt reload

如果您有问题,请检查您在构建中定义的 spark/scala 版本是否正确。

对于空值,我将开始研究数据管道的中间步骤,并尝试了解可能出了什么问题。


推荐阅读