为啥初始化 Spark Context 的代码在不同的源之间差别很大?

Posted

技术标签:

【中文标题】为啥初始化 Spark Context 的代码在不同的源之间差别很大?【英文标题】:Why does the code for initializing Spark Context vary widely between different sources?为什么初始化 Spark Context 的代码在不同的源之间差别很大? 【发布时间】:2019-10-14 23:16:52 【问题描述】:

我知道我需要初始化 Spark 上下文以在 PySpark 中创建弹性分布式数据集 (RDD)。但是,不同的来源给出了不同的代码来说明如何做到这一点。要一劳永逸地解决这个问题,正确的代码是什么?

1) 教程点的代码: https://www.tutorialspoint.com/pyspark/pyspark_sparkcontext.htm

from pyspark import SparkContext
sc = SparkContext("local", "First App")

2) 来自 Apache 的代码: https://spark.apache.org/docs/2.2.0/rdd-programming-guide.html#resilient-distributed-datasets-rdds

from pyspark import SparkContext, SparkConf

然后,在页面的后面,有:

conf = SparkConf().setAppName(appName).setMaster(master)
sc = SparkContext(conf=conf)

这只是两个例子。我可以列出更多,但对我来说主要问题是如此简单和基本的东西缺乏统一性。请帮忙澄清一下。

【问题讨论】:

都是一样的。您可以从1) 中的默认配置开始,然后您可以使用SparkConf 传递配置,例如2) 我有两个问题:A) 如果我不运行 SparkConf 会怎样? B) 如果我没有在 SparkContext 中指定 'local' 和 'First App' 会发生什么? A) 如果您不运行SparkConf,它将进入默认设置,但您需要从SparkContext 中删除conf=conf。 B) 如果你不指定local,它仍然会使用local 谢谢。此外,C) SparkContext 的文档没有“First App”一词。它有什么作用? D)当您说“本地”时,它指的是什么?是指 Spark 应用程序应该在本地还是在计算机集群上完成? 如果您说本地,您使用的是本地主机资源。当您指定 spark 集群的主节点 IP 地址时,您将使用集群资源。当你不指定应用名称时,它可以留空,或者 spark 可以创建一个随机名称 【参考方案1】:

1)

local[N] - N 是一个节点在任何时间点可以使用的最大核心数。这将使用您的本地主机资源。

在集群模式下(当您指定主节点 IP 时)您可以设置 --executor-cores N。意思是每个executor在一个executor中最多可以同时运行N个task。

2)

当您不指定应用名称时,它可以留空,或者 spark 可以创建一个随机名称。我正在尝试获取setAppName() 的源代码,但找不到任何肉

【讨论】:

以上是关于为啥初始化 Spark Context 的代码在不同的源之间差别很大?的主要内容,如果未能解决你的问题,请参考以下文章

SparkContext的初始化(季篇)——测量系统ContextCleaner及环境更新

第45讲:Scala中Context Bounds代码实战及其在Spark中的应用源码解析

为啥 Spark 作业失败并显示“退出代码:52”

Spark-submit Sql Context Create Statement 不起作用

spark 卡在spark context,运行出现spark Exception encountered while connecting to the server : javax.securi

Spark SQL 在不配置 Hive 的情况下加载数据?