如何用自定义属性初始化SparkContext?Spark Shell实操疑问
解决Spark-Shell中手动创建SparkContext的冲突问题
嘿,我太懂你碰到的这个坑了!其实问题出在spark-shell启动时已经自动帮你初始化了一个SparkContext实例,默认的变量名就是sc——而Spark规定一个JVM进程里只能存在一个活跃的SparkContext,所以你手动再new一个的时候就会触发冲突报错。
给你两个靠谱的解决方案:
方案一:启动Spark-Shell时直接指定配置(推荐)
不用进shell后再折腾,直接在终端启动时通过参数指定master和appName,这样默认生成的sc就是你想要的配置:
spark-shell --master local --appName MyApp
启动后直接用默认的sc就行,完全不用手动创建。
方案二:在已启动的Shell中替换SparkContext
如果已经进入shell了,不想重新启动的话,可以先停止现有的SparkContext,再创建新的:
// 先停止默认的SparkContext sc.stop() // 创建自定义配置的SparkConf val conf = new SparkConf().setMaster("local").setAppName("MyApp") // 初始化新的SparkContext val sc = new SparkContext(conf)
⚠️ 注意:这种方法偶尔会有小问题,比如一些和原SparkContext绑定的组件可能会出现异常,所以优先选方案一更稳妥。
另外提一句:Spark 2.0+版本更推荐使用SparkSession来操作,如果需要自定义配置,也可以用类似的思路——要么启动时加参数,要么停止原session后创建新的。
内容的提问来源于stack exchange,提问作者KayV
相关产品推荐
相关产品推荐

