我正在编写一个程序来访问Spark集群作为客户端。它连接如下:
val sc = new SparkContext(new SparkConf(loadDefaults = false)
.setMaster(sparkMasterEndpoint)
.setAppName("foo")
.set("spark.cassandra.connection.host", cassandraHost)
.setJars(Seq("target/scala-2.11/foo_2.11-1.0.jar"))
)
然后使用该上下文在Spark上运行操作。但是,我在代码中使用的任何lambdas /匿名函数都无法在Spark上运行。例如,我可能有:
val groupsDescription = sc.someRDD()
.groupBy(x => x.getSomeString())
.map(x => x._1 + " " + x._2.count(_ => true))
这会返回一个延迟评估的RDD,但是当我尝试从该RDD中提取一些值时,我从Spark中得到了这个异常:
java.lang.ClassNotFoundException: my.app.Main$$anonfun$groupify$1$$anonfun$2$$anonfun$apply$1
即使我已将我的应用程序的jar文件提供给Spark。我甚至看到一个日志行(在我的应用程序中,而不是在我的spark集群中)告诉我jar已经像这样上传了:
[info] o.a.s.SparkContext - Added JAR target/scala-2.11/foo_2.11-1.0.jar at spark://192.168.51.15:53575/jars/foo_2.11-1.0.jar with timestamp 1528320841157
我可以在任何地方找到关于这个主题的绝对没事,这让我发疯了!没有其他人参与这个问题?我看到的所有相关结果都是关于捆绑你的jar用于spark-submit
这不是我正在做的事情,我有一个独立的应用程序,它连接到一个独立的火花群集。这根本不受支持吗?我还能错过什么?还有什么可能导致这个?