Spark MLlib example, NoSuchMethodError: org.apache.spark.sql.SQLContext.createDataFrame()
Spark MLlib example, NoSuchMethodError: org.apache.spark.sql.SQLContext.createDataFrame()
我正在关注文档示例 Example: Estimator, Transformer, and Param
我收到错误消息
15/09/23 11:46:51 INFO BlockManagerMaster: Registered BlockManager
Exception in thread "main" java.lang.NoSuchMethodError:
scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/JavaUniverse$JavaMirror;
at SimpleApp$.main(hw.scala:75)
第75行是代码"sqlContext.createDataFrame()":
import java.util.Random
import org.apache.log4j.Logger
import org.apache.log4j.Level
import scala.io.Source
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.rdd._
import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.param.ParamMap
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.mllib.recommendation.{ALS, Rating, MatrixFactorizationModel}
import org.apache.spark.sql.Row
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions._
object SimpleApp {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Simple Application").setMaster("local[4]");
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val training = sqlContext.createDataFrame(Seq(
(1.0, Vectors.dense(0.0, 1.1, 0.1)),
(0.0, Vectors.dense(2.0, 1.0, -1.0)),
(0.0, Vectors.dense(2.0, 1.3, 1.0)),
(1.0, Vectors.dense(0.0, 1.2, -0.5))
)).toDF("label", "features")
}
}
我的 sbt 如下所示:
lazy val root = (project in file(".")).
settings(
name := "hello",
version := "1.0",
scalaVersion := "2.11.4"
)
libraryDependencies ++= {
Seq(
"org.apache.spark" %% "spark-core" % "1.4.1" % "provided",
"org.apache.spark" %% "spark-sql" % "1.4.1" % "provided",
"org.apache.spark" % "spark-hive_2.11" % "1.4.1",
"org.apache.spark" % "spark-mllib_2.11" % "1.4.1" % "provided",
"org.apache.spark" %% "spark-streaming" % "1.4.1" % "provided",
"org.apache.spark" %% "spark-streaming-kinesis-asl" % "1.4.1" % "provided"
)
}
我尝试四处搜索,发现 this post 这与我的问题非常相似,我尝试更改 spark 版本的 sbt 设置(spark-mllib_2.11 到 2.10,以及 spark- 1.4.1 到 1.5.0),但它带来了更多的依赖冲突。
我的直觉是版本问题,但我自己无法解决,有人可以帮忙吗?非常感谢。
它现在对我有用,只是为了记录,参考@MartinSenne 的回答。
我做的如下:
- 清除文件夹"project"下的所有编译文件
- scala 版本 2.10.4(之前使用的是 2.11.4)
- 将 spark-sql 更改为:“org.apache.spark” %% "spark-sql" % “1.4.1” % "provided"
- 将 MLlib 更改为:"org.apache.spark" %% "spark-mllib" % "1.4.1" % "provided"
@注:
- 我已经启动了一个 Spark 集群,我使用了“sh spark-submit /path_to_folder/hello/target/scala-2.10/hello_2.10-1.0.jar" 将 jar 提交给 Spark master。如果通过命令“sbt 运行”使用 sbt 到 运行 将失败。
- 从 scala-2.11 更改为 scala-2.10 时,请记住 jar 文件 路径和名称 也会从“scala-2.11/hello_2.11-1.0.jar”到“scala-2.10/hello_2.10-1.0.jar ”。当我重新打包所有东西时,我忘记更改 jar 名称的提交作业命令,所以我打包成 "hello_2.10-1.0.jar" 但是提交 "hello_2.10-1.0.jar" 这给我带来了额外的问题...
- 我尝试了 "val sqlContext = new org.apache.spark.sql.SQLContext(sc)" 和 "val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)",两者都使用方法 createDataFrame()
我正在关注文档示例 Example: Estimator, Transformer, and Param
我收到错误消息
15/09/23 11:46:51 INFO BlockManagerMaster: Registered BlockManager Exception in thread "main" java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/JavaUniverse$JavaMirror; at SimpleApp$.main(hw.scala:75)
第75行是代码"sqlContext.createDataFrame()":
import java.util.Random
import org.apache.log4j.Logger
import org.apache.log4j.Level
import scala.io.Source
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.rdd._
import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.param.ParamMap
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.mllib.recommendation.{ALS, Rating, MatrixFactorizationModel}
import org.apache.spark.sql.Row
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions._
object SimpleApp {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Simple Application").setMaster("local[4]");
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val training = sqlContext.createDataFrame(Seq(
(1.0, Vectors.dense(0.0, 1.1, 0.1)),
(0.0, Vectors.dense(2.0, 1.0, -1.0)),
(0.0, Vectors.dense(2.0, 1.3, 1.0)),
(1.0, Vectors.dense(0.0, 1.2, -0.5))
)).toDF("label", "features")
}
}
我的 sbt 如下所示:
lazy val root = (project in file(".")).
settings(
name := "hello",
version := "1.0",
scalaVersion := "2.11.4"
)
libraryDependencies ++= {
Seq(
"org.apache.spark" %% "spark-core" % "1.4.1" % "provided",
"org.apache.spark" %% "spark-sql" % "1.4.1" % "provided",
"org.apache.spark" % "spark-hive_2.11" % "1.4.1",
"org.apache.spark" % "spark-mllib_2.11" % "1.4.1" % "provided",
"org.apache.spark" %% "spark-streaming" % "1.4.1" % "provided",
"org.apache.spark" %% "spark-streaming-kinesis-asl" % "1.4.1" % "provided"
)
}
我尝试四处搜索,发现 this post 这与我的问题非常相似,我尝试更改 spark 版本的 sbt 设置(spark-mllib_2.11 到 2.10,以及 spark- 1.4.1 到 1.5.0),但它带来了更多的依赖冲突。
我的直觉是版本问题,但我自己无法解决,有人可以帮忙吗?非常感谢。
它现在对我有用,只是为了记录,参考@MartinSenne 的回答。
我做的如下:
- 清除文件夹"project"下的所有编译文件
- scala 版本 2.10.4(之前使用的是 2.11.4)
- 将 spark-sql 更改为:“org.apache.spark” %% "spark-sql" % “1.4.1” % "provided"
- 将 MLlib 更改为:"org.apache.spark" %% "spark-mllib" % "1.4.1" % "provided"
@注:
- 我已经启动了一个 Spark 集群,我使用了“sh spark-submit /path_to_folder/hello/target/scala-2.10/hello_2.10-1.0.jar" 将 jar 提交给 Spark master。如果通过命令“sbt 运行”使用 sbt 到 运行 将失败。
- 从 scala-2.11 更改为 scala-2.10 时,请记住 jar 文件 路径和名称 也会从“scala-2.11/hello_2.11-1.0.jar”到“scala-2.10/hello_2.10-1.0.jar ”。当我重新打包所有东西时,我忘记更改 jar 名称的提交作业命令,所以我打包成 "hello_2.10-1.0.jar" 但是提交 "hello_2.10-1.0.jar" 这给我带来了额外的问题...
- 我尝试了 "val sqlContext = new org.apache.spark.sql.SQLContext(sc)" 和 "val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)",两者都使用方法 createDataFrame()