(Spark 异常) Failed to get broadcast_0_piece0 of broadcast_0

问题

之前开发的时候遇到. Failed to get broadcast_0_piece0 of broadcast_0异常.

20/07/03 15:58:50 ERROR Utils: Exception encountered
org.apache.spark.SparkException: Failed to get broadcast_0_piece0 of broadcast_0
	at org.apache.spark.broadcast.TorrentBroadcast$$anonfun$org$apache$spark$broadcast$TorrentBroadcast$$readBlocks$1.apply$mcVI$sp(TorrentBroadcast.scala:178)
	at org.apache.spark.broadcast.TorrentBroadcast$$anonfun$org$apache$spark$broadcast$TorrentBroadcast$$readBlocks$1.apply(TorrentBroadcast.scala:150)
	at org.apache.spark.broadcast.TorrentBroadcast$$anonfun$org$apache$spark$broadcast$TorrentBroadcast$$readBlocks$1.apply(TorrentBroadcast.scala:150)
	at scala.collection.immutable.List.foreach(List.scala:381)
	at org.apache.spark.broadcast.TorrentBroadcast.org$apache$spark$broadcast$TorrentBroadcast$$readBlocks(TorrentBroadcast.scala:150)
	at org.apache.spark.broadcast.TorrentBroadcast$$anonfun$readBroadcastBlock$1.apply(TorrentBroadcast.scala:222)
	at org.apache.spark.util.Utils$.tryOrIOException(Utils.scala:1303)
	at org.apache.spark.broadcast.TorrentBroadcast.readBroadcastBlock(TorrentBroadcast.scala:206)
	at org.apache.spark.broadcast.TorrentBroadcast._value$lzycompute(TorrentBroadcast.scala:66)
	at org.apache.spark.broadcast.TorrentBroadcast._value(TorrentBroadcast.scala:66)
	at org.apache.spark.broadcast.TorrentBroadcast.getValue(TorrentBroadcast.scala:96)
	at org.apache.spark.broadcast.Broadcast.value(Broadcast.scala:70)
	at org.apache.spark.rdd.HadoopRDD.getJobConf(HadoopRDD.scala:139)
	at org.apache.spark.rdd.HadoopRDD$$anon$1.<init>(HadoopRDD.scala:212)
	at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:208)
	at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:94)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
	at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
	at org.apache.spark.scheduler.Task.run(Task.scala:108)
	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:338)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

原因&解决措施

在这里插入图片描述
去节点查看了一下知道. 基本上是第一次没有执行完毕, 随后又开了一个SparkContext导致的.

使用单例模式替换即可. 单例模式代码如下所示(此处使用饿汉模式):

// SparkConfig 要写成单例模式.
public class SeanSparkConfig {
	public static JavaSparkContext sparkContext; 
	public static String exameDateFilePath = "data/demos/exam/exam.txt";
	
	static {
		//boolean runLocalFlag = false;
		boolean runLocalFlag = true;
		SparkConf sparkconf;
		if(runLocalFlag) {
			sparkconf = new SparkConf().setAppName("Examle").setMaster("local[2]"); 
		}else {
			sparkconf = new SparkConf().setAppName("Examle").setMaster("spark://localhost:7077").setJars(new String[] {"/Users/sean/Documents/Gitrep/bigdata/spark/target/spark-demo.jar"});
		}
		sparkContext = new JavaSparkContext(sparkconf);
	}

}
  • 使用. 使用时直接调用即可.
JavaRDD<String> examLinesRDD = SeanSparkConfig.sparkContext.textFile(SeanSparkConfig.exameDateFilePath);	

Reference

[1]. Failed to get broadcast_10_piece0 of broadcast_10
[2]. Spark常见异常:Failed to get broadcast_32_piece0 of broadcast_32
[3]. repartition导致的广播失败,关于错误Failed to get broadcast_544_piece0 of broadcast_544

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NumPy中的broadcast_to函数是用来将数组广播到指定形状的函数。广播是一种在不进行复制的情况下,使用较小的数组来操作较大的数组的机制。该函数接受两个参数,第一个参数是要广播的数组,第二个参数是目标形状。广播的规则是,将较小的数组在某些维度上进行复制,使得两个数组可以进行元素级别的操作。最终,较小的数组将会被复制到与较大的数组具有相同形状的位置上。 下面是一个使用broadcast_to函数的示例代码: ```python import numpy as np a = np.array([[1, 2, 3]]) b = np.broadcast_to(a, (3, 3)) print("原数组 a:") print(a) print("调用 broadcast_to 函数之后的数组 b:") print(b) ``` 运行结果如下: ``` 原数组 a: [[1 2 3]] 调用 broadcast_to 函数之后的数组 b: [[1 2 3] [1 2 3] [1 2 3]] ``` 在这个示例中,我们创建了一个形状为(1, 3)的数组a,然后使用broadcast_to函数将其广播到形状为(3, 3)的数组b。由于广播的规则,数组a在第一个维度上被复制了3次,最终得到了与数组b具有相同形状的结果。 (出处: Python numpy.broadcast_to函数方法的使用) (出处: Python numpy.expand_dims函数方法的使用) (出处: Python numpy.squeeze函数方法的使用)<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python numpy.broadcast_to函数方法的使用](https://blog.csdn.net/a991361563/article/details/119977132)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python-Numpy多维数组--数组操作](https://blog.csdn.net/Odyssues_lee/article/details/85252366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值