Spark独立集群运行代码报错:Could not parse Master URL求助
解决PySpark "Could not parse Master URL" 错误
我来帮你搞定这个问题!先看你的错误提示:Could not parse Master URL: '<pyspark.conf.SparkConf object at 0x7fb27e864850>',这明显是初始化SparkContext的时候传参出了问题。
问题根源
PySpark的SparkContext构造函数里,第一个位置参数是master地址字符串,但你直接把conf对象丢进去了——Spark会把这个对象当成master地址来解析,这肯定会失败啊!你需要明确告诉Spark这是配置对象,而不是master地址。
解决方案1:正确传递conf参数
修改创建SparkContext的那一行,明确指定conf参数:
from pyspark import SparkConf,SparkContext if __name__ == "__main__": conf = SparkConf().setAppName("even-numbers").setMaster("spark://sumit-Inspiron-N5110:7077") # 这里要加上conf=,告诉Spark这是配置参数 sc = SparkContext(conf=conf) inp = sc.parallelize([1,2,3,4,5]) even = inp.filter(lambda x: (x % 2 == 0)).collect() for i in even: print(i) # 记得手动关闭上下文,避免资源占用 sc.stop()
解决方案2:用getOrCreate()更稳妥
推荐你用SparkContext.getOrCreate()方法,它会自动检查是否已有有效的上下文,没有再创建,能避免重复初始化的问题:
from pyspark import SparkConf,SparkContext if __name__ == "__main__": conf = SparkConf().setAppName("even-numbers").setMaster("spark://sumit-Inspiron-N5110:7077") sc = SparkContext.getOrCreate(conf=conf) inp = sc.parallelize([1,2,3,4,5]) even = inp.filter(lambda x: (x % 2 == 0)).collect() for i in even: print(i) sc.stop()
额外小建议:别在代码里硬编码master(最佳实践)
其实在实际使用中,不建议在代码里写死master地址,而是通过spark-submit的命令行参数指定,这样代码可以适配本地、集群等不同环境,不用每次改代码:
- 先修改代码,去掉
setMaster():
from pyspark import SparkConf,SparkContext if __name__ == "__main__": conf = SparkConf().setAppName("even-numbers") sc = SparkContext.getOrCreate(conf=conf) inp = sc.parallelize([1,2,3,4,5]) even = inp.filter(lambda x: (x % 2 == 0)).collect() for i in even: print(i) sc.stop()
- 提交时用命令指定master:
# 提交到独立集群 ./bin/spark-submit --master spark://sumit-Inspiron-N5110:7077 even.py # 本地运行(用所有核心) ./bin/spark-submit --master local[*] even.py
这样不管是测试还是上线,代码都不用改,是不是更方便?
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

