Java 为什么Spark会以“失败”而失败;无法获取广播“U 0”的广播“U 0”;在本地模式下?
我运行此代码段对点的RDD进行排序,对RDD进行排序,并从给定点获取K个最近点:Java 为什么Spark会以“失败”而失败;无法获取广播“U 0”的广播“U 0”;在本地模式下?,java,scala,intellij-idea,apache-spark,scalatest,Java,Scala,Intellij Idea,Apache Spark,Scalatest,我运行此代码段对点的RDD进行排序,对RDD进行排序,并从给定点获取K个最近点: def getKNN(sparkContext:SparkContext, k:Int, point2:Array[Double], pointsRDD:RDD[Array[Double]]): RDD[Array[Double]] = { val tuplePointDistanceRDD:RDD[(Double, Array[Double])] = pointsRDD.map(point =>
def getKNN(sparkContext:SparkContext, k:Int, point2:Array[Double], pointsRDD:RDD[Array[Double]]): RDD[Array[Double]] = {
val tuplePointDistanceRDD:RDD[(Double, Array[Double])] = pointsRDD.map(point =>
(DistanceUtils.euclidianDistance(point, point2), point))
sparkContext.parallelize(tuplePointDistanceRDD.sortBy(_._1).map(_._2).take(k))
}
在我的应用程序中只使用一个SparkContext并将其作为参数传递给我的函数,我得到了一个org.apache.spark.sparkeException:在调用SparkContext.parallelize(tuplePointDistanceRDD.sortBy(u.1).map(u.2).take(k))的那一刻,无法获取广播\u0\u0的片段0
从点2
获取KNN点
我正在构建sparkContext
,如下所示:
var sparkContext = new SparkContext("local", "<app_name>")
刚刚发现为什么会出现此异常:出于某种原因,我的SparkContext
对象在ScalaTest
方法之间启动/停止了几次。因此,纠正这种行为会使spark以我期望的正确方式工作。我也面临同样的问题。经过大量的谷歌搜索,我发现我已经为SparkContext初始化创建了一个单例类,该类仅对单个JVM实例有效,但在Spark的情况下,该单例类将从运行在单独JVM实例上的每个工作节点调用,从而导致多个SparkContext对象。我也遇到了这个错误。我还没有看到任何具体的编码示例,所以我将与大家分享我的解决方案。这为我清除了错误,但我感觉这个问题可能有不止一个解决方案。但这值得一试,因为它将所有内容都保存在代码中
看起来SparkContext正在关闭,因此抛出了错误。我认为问题在于SparkContext是在一个类中创建的,然后扩展到其他类。扩展导致它关闭,这有点烦人。下面是我用来清除此错误的实现
火花初始化等级:
import org.apache.spark.{SparkConf, SparkContext}
class Spark extends Serializable {
def getContext: SparkContext = {
@transient lazy val conf: SparkConf =
new SparkConf()
.setMaster("local")
.setAppName("test")
@transient lazy val sc: SparkContext = new SparkContext(conf)
sc.setLogLevel("OFF")
sc
}
}
主要类别:
object Test extends Spark{
def main(args: Array[String]): Unit = {
val sc = getContext
val irisRDD: RDD[String] = sc.textFile("...")
...
}
然后用Spark类扩展你们的另一个类,一切都会好起来的
我在运行LogisticRegression模型时遇到了错误,因此我认为这应该可以为您以及其他机器学习库修复它 对我来说有帮助,因为SparkContext已经创建了
val sc = SparkContext.getOrCreate()
在我尝试这个之前
val conf = new SparkConf().setAppName("Testing").setMaster("local").set("spark.driver.allowMultipleContexts", "true")
val sc = SparkContext(conf)
但我跑的时候它坏了
spark.createDataFrame(rdd, schema)
与上述答案相关,我在无意中将datastax连接器(即Cassandra连接驱动程序)查询序列化到spark从属时遇到了这个问题。然后,它剥离了自己的SparkContext,在4秒内整个应用程序崩溃了在IDEA中启动时,ScalateTest中是否还有其他测试可用?您可以改用local[*]
吗?您使用的是哪一版本的Spark?您是如何修复SparkContext的启动/停止行为的?请详细说明您是如何修复此问题的。只需从Singleton类中删除SparkContext初始化并将其放入驱动程序代码中即可。
spark.createDataFrame(rdd, schema)