- PySpark 教程
- PySpark - 首页
- PySpark - 简介
- PySpark - 环境搭建
- PySpark - SparkContext
- PySpark - RDD
- PySpark - 广播变量 & 累加器
- PySpark - SparkConf
- PySpark - SparkFiles
- PySpark - StorageLevel
- PySpark - MLlib
- PySpark - 序列化器
- PySpark 有用资源
- PySpark - 快速指南
- PySpark - 有用资源
- PySpark - 讨论
PySpark - SparkContext
SparkContext 是任何 Spark 功能的入口点。当我们运行任何 Spark 应用程序时,会启动一个驱动程序,其中包含主函数,并且在此处初始化 SparkContext。然后,驱动程序在工作节点上的执行器上运行操作。
SparkContext 使用 Py4J 启动一个JVM并创建一个JavaSparkContext。默认情况下,PySpark 提供了名为‘sc’的 SparkContext,因此创建新的 SparkContext 将不起作用。
以下代码块包含 PySpark 类和 SparkContext 可以接受的参数的详细信息。
class pyspark.SparkContext ( master = None, appName = None, sparkHome = None, pyFiles = None, environment = None, batchSize = 0, serializer = PickleSerializer(), conf = None, gateway = None, jsc = None, profiler_cls = <class 'pyspark.profiler.BasicProfiler'> )
参数
以下是 SparkContext 的参数。
Master − 它是要连接到的集群的 URL。
appName − 作业的名称。
sparkHome − Spark 安装目录。
pyFiles − 要发送到集群并添加到 PYTHONPATH 的 .zip 或 .py 文件。
Environment − 工作节点的环境变量。
batchSize − 表示为单个 Java 对象的 Python 对象数量。设置为 1 可禁用批处理,设置为 0 可根据对象大小自动选择批处理大小,设置为 -1 可使用无限批处理大小。
Serializer − RDD 序列化器。
Conf − L{SparkConf} 对象,用于设置所有 Spark 属性。
Gateway − 使用现有的网关和 JVM,否则初始化新的 JVM。
JSC − JavaSparkContext 实例。
profiler_cls − 用于执行分析的自定义 Profiler 类(默认为 pyspark.profiler.BasicProfiler)。
在以上参数中,master 和 appname 最常使用。任何 PySpark 程序的前两行如下所示:
from pyspark import SparkContext sc = SparkContext("local", "First App")
SparkContext 示例 – PySpark Shell
现在您已经了解了足够的 SparkContext 知识,让我们在 PySpark shell 上运行一个简单的示例。在这个示例中,我们将计算README.md文件中包含字符“a”或“b”的行数。例如,如果文件中共有 5 行,其中 3 行包含字符“a”,则输出将为 → 包含 a 的行数:3。字符“b”的处理方式相同。
注意 − 在以下示例中,我们没有创建任何 SparkContext 对象,因为默认情况下,当 PySpark shell 启动时,Spark 会自动创建名为 sc 的 SparkContext 对象。如果您尝试创建另一个 SparkContext 对象,将会收到以下错误 – “ValueError: Cannot run multiple SparkContexts at once”。
<<< logFile = "file:///home/hadoop/spark-2.1.0-bin-hadoop2.7/README.md" <<< logData = sc.textFile(logFile).cache() <<< numAs = logData.filter(lambda s: 'a' in s).count() <<< numBs = logData.filter(lambda s: 'b' in s).count() <<< print "Lines with a: %i, lines with b: %i" % (numAs, numBs) Lines with a: 62, lines with b: 30
SparkContext 示例 - Python 程序
让我们使用 Python 程序运行相同的示例。创建一个名为firstapp.py的 Python 文件,并在该文件中输入以下代码。
----------------------------------------firstapp.py--------------------------------------- from pyspark import SparkContext logFile = "file:///home/hadoop/spark-2.1.0-bin-hadoop2.7/README.md" sc = SparkContext("local", "first app") logData = sc.textFile(logFile).cache() numAs = logData.filter(lambda s: 'a' in s).count() numBs = logData.filter(lambda s: 'b' in s).count() print "Lines with a: %i, lines with b: %i" % (numAs, numBs) ----------------------------------------firstapp.py---------------------------------------
然后,我们将在终端中执行以下命令来运行此 Python 文件。我们将得到与上面相同的输出。
$SPARK_HOME/bin/spark-submit firstapp.py Output: Lines with a: 62, lines with b: 30