基于RDD API
SparkContext
- 在Spark 2.0之前,SparkContext是所有Spark任务的入口
- SparkContext包含了Spark程序的基本配置,Spark的驱动程序利用SparkContext来连接到集群
- 无论Spark集群有多少个节点做并行处理,每个程序都只有唯一的SparkContext,它可以被SparkConf初始化
1 | from pyspark import SparkConf, SparkContext, HiveContext |
SparkSession
- 在Spark 2.0之后,随着DataFrame/DataSet API的普及,Spark引入了新的SparkSession对象作为所有Spark任务的入口
- SparkSession不仅有SparkContext的所有功能,还集成了所有Spark提供的API
- 例如DataFrame、Spark Streaming和Structured Streaming,无需再为不同的功能定义不同的Context
- 由于SparkSession的普适性,尽量使用SparkSession作为Spark程序的入口
1 | from pyspark.sql import SparkSession |
基于DataFrame API
- Scala和Java都支持对DataFrame进行flatMap操作,但Python不支持,需要借助两个新操作:split、explode
- split是pyspark.sql.functions库提供的函数
- 作用于DataFrame的某一列,可以把列中的字符串按照某个分隔符分割成一个字符串数组
- explode也是pyspark.sql.functions库提供的函数
- 作用于DataFrame的某一列,可以把列中的数组或者map中的每一个元素创建一个新的Row
- DataSet/DataFrame API的便利性:不需要创建<word,count>对作为中间值,可以直接对数据进行类似SQL的查询
1 | from pyspark.sql import SparkSession |
