我对PySpark很陌生。
我正在 Jupyter 笔记本中运行一个脚本(主要是创建一个 tfidf 并用它预测 9 个分类列)。手动执行所有单元格时大约需要 5 分钟。从 spark-submit 运行相同的脚本时,大约需要 45 分钟。发生了什么事情?
如果我从终端使用 python 运行代码,也会发生同样的事情(多余的时间)。
我还在脚本中将配置设置为
conf = SparkConf().set('spark.executor.memory', '45G').set('spark.driver.memory', '80G').set('spark.driver.maxResultSize', '20G')
任何帮助,不胜感激。提前谢谢。
有多种方法可以运行Spark代码,就像你提到的Notebook,Pyspark和Spark-submit一样。
- 关于Jupyter Notebook或pyspark shell。
当您在 Jupyter 笔记本或 pyspark shell 中运行代码时,它可能已经为执行器内存、驱动程序内存、执行程序核心等设置了一些默认值。
- 关于火花提交。
但是,使用 Spark-submit 时,默认情况下这些值可能会有所不同。因此,最好的方法是在使用"spark-submit"实用程序提交pyspark应用程序时将这些值作为标志传递。
- 关于您创建的配置对象,可以在创建Spark上下文(sc)时传递。
sc = SparkContext(conf=conf)
希望这有帮助。
问候
尼拉杰
我遇到了同样的问题,但是为了初始化我的火花变量,我使用了这一行:
spark = SparkSession.builder.master("local[1]").appName("Test").getOrCreate()
问题在于"local[X]",相当于说 Spark 将在本地机器上、X 内核上进行操作。因此,您必须使用计算机上可用的内核数来优化 X。
要将其与纱线簇一起使用,您必须放置"纱线"。
这里列出了许多其他可能性 https://spark.apache.org/docs/latest/submitting-applications.html: