scala.Function0 运行 在 Scala 中激发简单的 WordCount
scala.Function0 running spark simple WordCount in Scala
我正在尝试 运行 一个用 spark 在 scala 中计算单词的简单程序。我已经在linux中自己完成了所有安装,但我无法执行它,因为我有这个错误:
java.lang.ClassNotFoundException: scala.Function0
at sbt.internal.inc.classpath.ClasspathFilter.loadClass(ClassLoaders.scala:74)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.twitter.chill.KryoBase$$anonfun.apply(KryoBase.scala:41)
at com.twitter.chill.KryoBase$$anonfun.apply(KryoBase.scala:41)
at scala.collection.TraversableLike$$anonfun$map.apply(TraversableLike.scala:234)
at scala.collection.TraversableLike$$anonfun$map.apply(TraversableLike.scala:234)
at scala.collection.immutable.Range.foreach(Range.scala:160)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
at scala.collection.AbstractTraversable.map(Traversable.scala:104)
at com.twitter.chill.KryoBase.<init>(KryoBase.scala:41)
at com.twitter.chill.EmptyScalaKryoInstantiator.newKryo(ScalaKryoInstantiator.scala:57)
at org.apache.spark.serializer.KryoSerializer.newKryo(KryoSerializer.scala:96)
at org.apache.spark.serializer.KryoSerializerInstance.borrowKryo(KryoSerializer.scala:292)
at org.apache.spark.serializer.KryoSerializerInstance.<init>(KryoSerializer.scala:277)
at org.apache.spark.serializer.KryoSerializer.newInstance(KryoSerializer.scala:186)
at org.apache.spark.serializer.KryoSerializer.supportsRelocationOfSerializedObjects$lzycompute(KryoSerializer.scala:193)
at org.apache.spark.serializer.KryoSerializer.supportsRelocationOfSerializedObjects(KryoSerializer.scala:189)
at org.apache.spark.shuffle.sort.SortShuffleManager$.canUseSerializedShuffle(SortShuffleManager.scala:187)
at org.apache.spark.shuffle.sort.SortShuffleManager.registerShuffle(SortShuffleManager.scala:99)
at org.apache.spark.ShuffleDependency.<init>(Dependency.scala:90)
at org.apache.spark.rdd.ShuffledRDD.getDependencies(ShuffledRDD.scala:87)
at org.apache.spark.rdd.RDD$$anonfun$dependencies.apply(RDD.scala:239)
at org.apache.spark.rdd.RDD$$anonfun$dependencies.apply(RDD.scala:237)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.rdd.RDD.dependencies(RDD.scala:237)
at org.apache.spark.scheduler.DAGScheduler.getShuffleDependencies(DAGScheduler.scala:431)
at org.apache.spark.scheduler.DAGScheduler.getOrCreateParentStages(DAGScheduler.scala:380)
at org.apache.spark.scheduler.DAGScheduler.createResultStage(DAGScheduler.scala:367)
at org.apache.spark.scheduler.DAGScheduler.handleJobSubmitted(DAGScheduler.scala:850)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:1677)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1669)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1658)
at org.apache.spark.util.EventLoop$$anon.run(EventLoop.scala:48)
基本上我要执行的代码是:
import org.apache.spark.sql.SparkSession
object SparkWordCount extends App {
val spark = SparkSession.builder
.master("local[*]")
.appName("Spark Word Count")
.getOrCreate()
val lines = spark.sparkContext.parallelize(
Seq("Spark Intellij Idea Scala test one",
"Spark Intellij Idea Scala test two",
"Spark Intellij Idea Scala test three"))
val counts = lines.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
counts.foreach(println)
}
我觉得应该是spark和scala版本的问题,但是没找到好的解决办法。
我的 build.sbt 看起来像这样:
name := "com.example.test"
version := "0.1"
scalaVersion := "2.11.8"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.2.0",
"org.apache.spark" %% "spark-sql" % "2.2.0"
)
如果我在 spark-shell 中执行相同的代码,它会起作用,我已经安装了以下版本:
- 斯卡拉:2.11.8
- 火花:2.2.0
- sbt: 1.0.2
我也尝试过使用不同的 scala 版本、spark 和所有的东西,但是没有用,有人可以帮助我吗?
提前谢谢你,
贾维。
当我在项目中执行命令sbt时,它显示:
获取 Scala 2.12.3(用于 sbt)...
我无法理解,因为我在 build.sbt (scalaVersion := "2.11.8")
中指定了 scala 版本
我假设您正在尝试 运行 来自 Intellij Idea 的这段代码。如果这是真的,主要问题在于 Idea 配置。
转到文件>项目结构>全局库并检查您是否有scala -库安装。 Idea 使用自己的库和 SDK 资源,这就是为什么在 shell.
中一切正常的原因
我在纯 sbt 布局中尝试了您的代码,它使用完全相同的 build.sbt
和源文件。
一件小事。也许 Idea 在 运行 结束时自动停止所有 运行ning spark 会话,但我相信您必须明确停止活动会话。只需将 spark.stop()
放在可执行函数或对象的末尾即可。
我正在尝试 运行 一个用 spark 在 scala 中计算单词的简单程序。我已经在linux中自己完成了所有安装,但我无法执行它,因为我有这个错误:
java.lang.ClassNotFoundException: scala.Function0
at sbt.internal.inc.classpath.ClasspathFilter.loadClass(ClassLoaders.scala:74)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.twitter.chill.KryoBase$$anonfun.apply(KryoBase.scala:41)
at com.twitter.chill.KryoBase$$anonfun.apply(KryoBase.scala:41)
at scala.collection.TraversableLike$$anonfun$map.apply(TraversableLike.scala:234)
at scala.collection.TraversableLike$$anonfun$map.apply(TraversableLike.scala:234)
at scala.collection.immutable.Range.foreach(Range.scala:160)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
at scala.collection.AbstractTraversable.map(Traversable.scala:104)
at com.twitter.chill.KryoBase.<init>(KryoBase.scala:41)
at com.twitter.chill.EmptyScalaKryoInstantiator.newKryo(ScalaKryoInstantiator.scala:57)
at org.apache.spark.serializer.KryoSerializer.newKryo(KryoSerializer.scala:96)
at org.apache.spark.serializer.KryoSerializerInstance.borrowKryo(KryoSerializer.scala:292)
at org.apache.spark.serializer.KryoSerializerInstance.<init>(KryoSerializer.scala:277)
at org.apache.spark.serializer.KryoSerializer.newInstance(KryoSerializer.scala:186)
at org.apache.spark.serializer.KryoSerializer.supportsRelocationOfSerializedObjects$lzycompute(KryoSerializer.scala:193)
at org.apache.spark.serializer.KryoSerializer.supportsRelocationOfSerializedObjects(KryoSerializer.scala:189)
at org.apache.spark.shuffle.sort.SortShuffleManager$.canUseSerializedShuffle(SortShuffleManager.scala:187)
at org.apache.spark.shuffle.sort.SortShuffleManager.registerShuffle(SortShuffleManager.scala:99)
at org.apache.spark.ShuffleDependency.<init>(Dependency.scala:90)
at org.apache.spark.rdd.ShuffledRDD.getDependencies(ShuffledRDD.scala:87)
at org.apache.spark.rdd.RDD$$anonfun$dependencies.apply(RDD.scala:239)
at org.apache.spark.rdd.RDD$$anonfun$dependencies.apply(RDD.scala:237)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.rdd.RDD.dependencies(RDD.scala:237)
at org.apache.spark.scheduler.DAGScheduler.getShuffleDependencies(DAGScheduler.scala:431)
at org.apache.spark.scheduler.DAGScheduler.getOrCreateParentStages(DAGScheduler.scala:380)
at org.apache.spark.scheduler.DAGScheduler.createResultStage(DAGScheduler.scala:367)
at org.apache.spark.scheduler.DAGScheduler.handleJobSubmitted(DAGScheduler.scala:850)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:1677)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1669)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1658)
at org.apache.spark.util.EventLoop$$anon.run(EventLoop.scala:48)
基本上我要执行的代码是:
import org.apache.spark.sql.SparkSession
object SparkWordCount extends App {
val spark = SparkSession.builder
.master("local[*]")
.appName("Spark Word Count")
.getOrCreate()
val lines = spark.sparkContext.parallelize(
Seq("Spark Intellij Idea Scala test one",
"Spark Intellij Idea Scala test two",
"Spark Intellij Idea Scala test three"))
val counts = lines.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
counts.foreach(println)
}
我觉得应该是spark和scala版本的问题,但是没找到好的解决办法。
我的 build.sbt 看起来像这样:
name := "com.example.test"
version := "0.1"
scalaVersion := "2.11.8"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.2.0",
"org.apache.spark" %% "spark-sql" % "2.2.0"
)
如果我在 spark-shell 中执行相同的代码,它会起作用,我已经安装了以下版本:
- 斯卡拉:2.11.8
- 火花:2.2.0
- sbt: 1.0.2
我也尝试过使用不同的 scala 版本、spark 和所有的东西,但是没有用,有人可以帮助我吗?
提前谢谢你, 贾维。
当我在项目中执行命令sbt时,它显示:
获取 Scala 2.12.3(用于 sbt)...
我无法理解,因为我在 build.sbt (scalaVersion := "2.11.8")
中指定了 scala 版本我假设您正在尝试 运行 来自 Intellij Idea 的这段代码。如果这是真的,主要问题在于 Idea 配置。
转到文件>项目结构>全局库并检查您是否有scala -库安装。 Idea 使用自己的库和 SDK 资源,这就是为什么在 shell.
中一切正常的原因我在纯 sbt 布局中尝试了您的代码,它使用完全相同的 build.sbt
和源文件。
一件小事。也许 Idea 在 运行 结束时自动停止所有 运行ning spark 会话,但我相信您必须明确停止活动会话。只需将 spark.stop()
放在可执行函数或对象的末尾即可。