PySpark SparkContext
SparkContext是任何Spark功能的入口点。当我们运行任何Spark应用程序时,一个驱动程序会启动,它有主要的功能,你的SparkContext在这里被启动。然后驱动程序在工作节点的执行器内运行操作。
SparkContext使用Py4J来启动一个 JVM 并创建一个 JavaSparkContext。 默认情况下,PySpark有SparkContext可用的 ‘sc ‘,所以创建一个新的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 – 发送给集群的.zip或.py文件,并添加到PYTHONPATH中。
-
Environment – 工作节点的环境变量。
-
batchSize – 以单个Java对象表示的Python对象的数量。设置1可以禁用批处理,设置0可以根据对象的大小自动选择批处理大小,设置-1可以使用无限制的批处理大小。
-
Serializer – RDD序列化器。
-
Conf – L{SparkConf}的一个对象,用于设置所有Spark属性。
-
Gateway – 使用现有网关和JVM,否则初始化一个新的JVM。
-
JSC – JavaSparkContext实例。
-
profiler_cls – 用于做剖析的自定义剖析器类(默认是 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:不能同时运行多个SparkContexts”。
<<< 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