1 Spark SQL的统一入门
从Spark SQL开始, 需要更换核心对象, 因为SparkContext对象是SparkCore核心对象, 无法支持Spark SQL编写的, Spark框架专门提供了一个用于支持Spark SQL的编程入口类: SparkSession, 此类同时也可以获取原有的SparkContext对象
如何构建一个SparkSession对象呢?
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
import os
# 锁定远端环境, 确保环境统一
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'
if __name__ == '__main__':
print("演示: 如何创建SparkSession核心对象")
# 1. 创建SparkSession对象
spark = SparkSession.builder.appName('create_spark_session').master('local[*]').getOrCreate()
# 2. 获取SparkContext对象
sc = spark.sparkContext
# 3. 执行相关的操作: Spark SQL 还是 Spark RDD
# 4. 释放资源
sc.stop()
spark.stop()
2. Spark SQL的入门案例
需求: 有如下结构化数据, 要求查询在北京地区的学员有那些?
数据集:
1,张三,男,北京
2,李四,女,上海
3,王五,女,北京
4,赵六,男,广州
5,田七,男,北京
6,周八,女,杭州
代码实现:
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
import os
# 锁定远端环境, 确保环境统一
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'
if __name__ == '__main__':
print("Spark SQL的入门案例")
# 1. 创建SparkSession对象
spark = SparkSession.builder.appName('spark_sql_init').master('local[*]').getOrCreate()
# 2.读取外部文件数据
"""
path: 指定读取数据的路径
header: 数据集是否含有头信息,默认为False(如果为true, 会将数据集第一行设置为表头)
inferSchema: 是否需要自动识别每一列的数据类型,默认为false
sep: 设置字段与字段之间的分隔符号, 默认为 csv为 逗号
"""
df = spark.read.csv(
path='file:///export/data/workspace/ky06_pyspark/_03_SparkSql/data/stu.txt',
header=True,
inferSchema=True,
sep=' ',
encoding='UTF-8'
)
#df.printSchema() # 查看字段结构信息
#df.show() # 显示数据, 默认显示前20行
# 3- 执行相关的操作:
# 3.1 使用SQL 的形式
df.createTempView('stu')
df_res = spark.sql("""
select
*
from stu where address = '北京'
""")
df_res.show()
# 3.2 代码的形式
df.where("address = '北京'").show()
# 3- 释放资源
spark.stop()