我正在运行此代码段来对点的RDD进行排序,对RDD进行排序并从给定点获取K-最近点:
echo preg_replace("/<\\?xml.*\\?>/",'',$doc->saveXML(),1);
}
在我的应用程序中只使用一个SparkContext并将其作为参数传递给我的函数,我在调用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))
从org.apache.spark.SparkException: Failed to get broadcast_0_piece0 of broadcast_0
获取KNN点时出现sparkContext.parallelize(tuplePointDistanceRDD.sortBy(_._1).map(_._2).take(k))
错误{1}}。
我正在构建point2
,如下面的代码段:
sparkContext
面对这种错误的可能原因是什么?
基本上这是我的独立spark环境的LOG,其中包含此错误的堆栈跟踪:
var sparkContext = new SparkContext("local", "<app_name>")
答案 0 :(得分:5)
刚刚发现为什么我收到此异常:由于某种原因,SparkContext
对象在ScalaTest
方法之间多次启动/停止。所以,修正这种行为会让我以正常的方式获得火花。
答案 1 :(得分:2)
我也遇到了这个错误。我还没有看到任何具体的编码示例,所以我将分享我的解决方案。这清除了我的错误,但我感觉这个问题可能有多个解决方案。但这值得一试,因为它将所有内容保存在代码中。
看起来SparkContext正在关闭,从而引发了错误。我认为问题是SparkContext是在类中创建的,然后扩展到其他类。扩展导致它关闭,这有点烦人。下面是我用来清除此错误的实现。
Spark初始化类:
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模型的错误,因此我认为这应该为您以及其他机器学习库修复它。
答案 2 :(得分:1)
我也面临同样的问题。经过大量的谷歌搜索后,我发现我为SparkContext初始化创建了一个单例类,它只对单个JVM实例有效,但是在Spark的情况下,这个单例类将从在单独的JVM实例上运行的每个工作节点调用,因此导致到多个SparkContext对象。
答案 3 :(得分:1)
对我来说有帮助,因为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)
答案 4 :(得分:1)
与上述答案有关,当我无意中将datastax连接器(即Cassandra连接驱动程序)查询序列化到Spark Slave时遇到了这个问题。然后将其拆分为自己的SparkContext,并在4秒钟内整个应用程序崩溃了