SparkContext、SparkConf以及进化版的SparkSession

Spark 2.0之前

需要显式地创建SparkConf实例,并用Conf实例初始化SparkContext,再用SparkContext创建SQLContext。
多数相关配置都在SparkConf中用set函数设置。

from pyspark import SparkContext,SparkConf
from pyspark.sql import SQLContext

# 各类配置
configure = SparkConf().setAppName("name").setMaster("local[*]")\
     .set("spark.executor.cores", 1)\
     .set("spark.sql.parquet.compression.codec", "snappy")

# 用以上配置创建一个 SparkContext、sqlContext
sc = SparkContext(conf = configure)
sqlContext = SQLContext(sc)
sc

SparkContext、SparkConf以及进化版的SparkSession_第1张图片

# SQLContext用来执行 DataFrame 相关操作
df_test = sqlContext.read.format('csv')\
    .option('header', 'true')\
    .option('inferSchema', 'true')\
    .load('/home/ghost/workdata/patients.csv')
df_test.printSchema()
root
 |-- patient_id: integer (nullable = true)
 |-- assigned_sex: string (nullable = true)
 |-- given_name: string (nullable = true)
 |-- surname: string (nullable = true)
 |-- address: string (nullable = true)
 |-- city: string (nullable = true)
 |-- state: string (nullable = true)
 |-- zip_code: integer (nullable = true)
 |-- country: string (nullable = true)
 |-- contact: string (nullable = true)
 |-- birthdate: string (nullable = true)
 |-- weight: double (nullable = true)
 |-- height: integer (nullable = true)
 |-- bmi: double (nullable = true)

Spark 2.0开始

SparkSession将SparkContext、SparkConf、SQLContext进行封装。
下面的config函数,相当于执行了SparkConf的set方法,而之后可以通过SparkSession完成各类操作。

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder\
        .master("local[*]")\
        .appName("Test Spark")\
        .config("spark.executor.cores", 2) \
        .config("spark.sql.parquet.compression.codec", "snappy")\
        .getOrCreate()
spark

SparkContext、SparkConf以及进化版的SparkSession_第2张图片

# 用 SparkSesson 实例读取 CSV 
df_test = spark.read.format('csv')\
    .option('header', 'true')\
    .option('inferSchema', 'true')\
    .load('/home/ghost/workdata/patients.csv')
# 显示前4列前5行
df_test.select(df_test.columns[0:4]).show(5)
+----------+------------+----------+-------+
|patient_id|assigned_sex|given_name|surname|
+----------+------------+----------+-------+
|         1|      female|       Zoe|Wellish|
|         2|      female|    Pamela|   Hill|
|         3|        male|       Jae| Debord|
|         4|        male|      Liêm|   Phan|
|         5|        male|       Tim|Neudorf|
+----------+------------+----------+-------+
only showing top 5 rows

总结

  • SparkContext相当于一个大的实例(一个JVM只能有一个SparkContext)
  • 每个SparkContext可以创建多个SparkSession会话
  • 每个会话有自己的参数配置(SparkConf)

你可能感兴趣的:(ETL/BI/大数据)