📜  PySpark-SparkContext

📅  最后修改于: 2020-11-06 05:15:32             🧑  作者: Mango


SparkContext是任何Spark功能的入口点。当我们运行任何Spark应用程序时,将启动一个驱动程序,该驱动程序具有主要函数,并且您的SparkContext在此处启动。然后,驱动程序在工作者节点上的执行程序内部运行操作。

SparkContext使用Py4J启动JVM并创建JavaSparkContext 。默认情况下,PySpark的SparkContext可以作为‘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 = 
)

参量

以下是SparkContext的参数。

  • Master-这是它连接到的集群的URL。

  • appName-您的工作名称。

  • sparkHome -Spark安装目录。

  • pyFiles-要发送到集群并添加到PYTHONPATH的.zip或.py文件。

  • 环境-工作节点环境变量。

  • batchSize-表示为单个Java对象的Python对象的数量。设置1以禁用批处理,设置为0以根据对象大小自动选择批处理大小,或设置为-1以使用无限的批处理大小。

  • 串行器-RDD串行器。

  • Conf -L {SparkConf}的对象,用于设置所有Spark属性。

  • 网关-使用现有的网关和JVM,否则初始化新的JVM。

  • JSC -JavaSparkContext实例。

  • profiler_cls-用于执行概要分析的自定义Profiler类(默认为pyspark.profiler.BasicProfiler)。

在以上参数中,主要使用masterappname 。任何PySpark程序的前两行如下所示-

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

SparkContext示例– PySpark Shell

既然您对SparkContext足够了解,那么让我们在PySpark shell上运行一个简单的示例。在此示例中,我们将计算README.md文件中字符“ a”或“ b”的行。因此,让我们说如果文件中有5行并且3行具有字符’a’,那么输出将是→ Line with a:3 。字符“ b”将执行相同的操作。

–在以下示例中,我们不会创建任何SparkContext对象,因为默认情况下,当PySpark shell启动时,Spark会自动创建名为sc的SparkContext对象。如果尝试创建另一个SparkContext对象,则会收到以下错误– “ ValueError:无法一次运行多个SparkContext。”。

PySpark外壳

<<< 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