Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Spark会以“失败”而失败;无法获取广播“U 0”的广播“U 0”;在本地模式下?_Java_Scala_Intellij Idea_Apache Spark_Scalatest - Fatal编程技术网

Java 为什么Spark会以“失败”而失败;无法获取广播“U 0”的广播“U 0”;在本地模式下?

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 =>

我运行此代码段对点的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 =>
                           (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)