SparkContext与SparkSession区别

文章目录

pyspark初始化

SparkContext

Spark中的主要接口,代表与Spark集群的连接。

在早期版本的Spark中,需要通过SparkContext对象来初始化Spark应用程序。在Spark 2.0之后,推荐使用SparkSession来替代。

  1. 创建RDD(弹性分布式数据集)。

  2. 控制应用程序的配置参数。

  3. 访问Spark执行环境中的各种服务。

    from pyspark import SparkConf, SparkContext
    from pyspark import SparkConf, SparkContext

    创建 SparkConf 对象并设置应用程序名称

    conf = SparkConf().setAppName("SparkContextExample").setMaster("local[*]")

    初始化 SparkContext

    sc = SparkContext(conf=conf)

    创建一个包含 1 到 10 的整数的 RDD

    data = range(1, 11)
    rdd = sc.parallelize(data)

    执行一些基本操作

    计算RDD中元素的平方和

    sum_of_squares = rdd.map(lambda x: x*x).reduce(lambda x, y: x + y)

    输出结果

    print("Sum of squares from 1 to 10 is:", sum_of_squares)

    停止 SparkContext

    sc.stop()

SparkSession

从Spark 2.0开始引入的新接口,可以看作是SparkContext和SQLContext的组合,简化了Spark应用程序的开发。

  1. 提供了一个统一的入口点来使用Spark功能,包括DataFrame和SQL操作。
  2. 简化了Spark应用程序的开发,提供了更高级别的API。
  3. 可以轻松地访问各种数据源(HIVE...)、执行结构化数据处理和SQL查询。
  4. 能够优化执行计划,并在后台自动管理连接,使得操作更加灵活和高效。
  5. 在Spark中,SparkSession是建议使用的主要入口点,可以进行数据处理、SQL查询等各种操作,提供了简单而强大的功能。

SparkContext用于底层的RDD编程和管理资源,而SparkSession是更高级别的API,支持结构化数据处理和SQL查询。

在Spark 2.0及以后版本,建议优先使用SparkSession,因为它整合了SparkContext和SQLContext,更方便和强大。

复制代码
from pyspark.sql import SparkSession

# 创建一个Spark会话
spark = SparkSession.builder \
    .appName("MyApp") \
    .config("spark.driver.extraJavaOptions", "-Dfile.encoding=UTF-8") \
    .config("spark.executor.extraJavaOptions", "-Dfile.encoding=UTF-8") \
    .getOrCreate()
    

# 获取Spark上下文对象
sc = spark.sparkContext

# 通过并行化集合来创建一个RDD
data = [1, 2, 3, 4, 5]
rdd = sc.parallelize(data)

# 打印RDD中的元素
for num in rdd.collect():
    print(num)

# 停止Spark会话
spark.stop()

SparkConf

复制代码
# 创建 SparkConf 对象并设置配置选项
conf = SparkConf()
conf.set("spark.app.name", "MySparkApp")
conf.set("spark.master", "local[*]")
conf.set("spark.some.config.option", "some-value")

# 创建的另一种方式
conf = SparkConf().setAppName("SparkConfExample").set("spark.some.config.option", "some-value")


#初始化 sparksession
spark = SparkSession.builder \
    .config(conf=conf) \
    .getOrCreate()
    
#不使用conf初始化 sparksession
spark = SparkSession.builder \
    .appName("MyApp") \
    .config("spark.driver.extraJavaOptions", "-Dfile.encoding=UTF-8") \
    .config("spark.executor.extraJavaOptions", "-Dfile.encoding=UTF-8") \
    .getOrCreate()

# 初始化 SparkContext
sc = SparkContext(conf=conf) 


#常见参数名
spark.app.name: 设置应用程序名称。
spark.master: 设置 master URL。可以local[*],也可以远程 "spark://192.168.0.76:7077" (但是远程一般会有python环境问题,除非环境一模一样)
spark.driver.memory: 设置 driver 内存大小。
spark.executor.instances: 设置 Executor 数量。
spark.executor.memory: 设置每个 Executor 的内存大小。
spark.executor.cores: 设置每个 Executor 的核心数
"hive.metastore.uris", "thrift://<metastore_host>:9083" hive链接
"spark.hadoop.fs.defaultFS", "hdfs://namenode:8020"     hdfs链接
#driver 和 executor 的 Java 选项,其中 -Dfile.encoding=UTF-8 指定了编码为 UTF-8。
"spark.driver.extraJavaOptions", "-Dfile.encoding=UTF-8"
"spark.executor.extraJavaOptions", "-Dfile.encoding=UTF-8"

spark-submit

复制代码
当使用 spark-submit 提交应用程序时,Spark 会话会根据集群环境中的配置信息自动连接到远程的 HDFS 和 Hive,前提是集群中已经正确配置了相关的连接信息。在集群环境下,可以直接使用 spark-submit 来提交应用程序,而无需手动配置所有连接参数,即可顺利连接到远程的 Hive 和 HDFS。

常用参数
spark-submit 命令非常灵活,可以接受很多参数来配置和提交 Spark 应用程序。一些常见的 spark-submit 参数包括:
--class: 指定应用程序的入口类。
--master: 指定 Spark 应用程序运行的模式,比如 local、yarn、mesos 等。
--deploy-mode: 指定应用程序的部署模式,可以是 client 或 cluster。
--conf: 设置 Spark 配置属性。
--files 和 --jars: 指定额外上传到集群的文件和依赖 JAR 包。
--driver-memory 和 --executor-memory: 设置 Driver 和 Executor 的内存大小。
--num-executors: 指定 Executor 的数量。
--queue: 指定提交作业的队列。

优先级
spark-submit 命令中指定的参数通常会覆盖应用程序代码内部配置的参数。当使用 spark-submit 提交应用程序时,命令行参数会覆盖应用程序中硬编码的参数配置,以确保在不同环境下能够动态地调整应用程序的行为。
如果在应用程序代码中已经针对某些参数进行了固定设置,而在 spark-submit 中再次指定了相同参数,那么 spark-submit 中指定的参数值将优先生效。
这种机制使得在部署和运行应用程序时更加灵活,可以根据需要在不同环境下动态地调整参数配置,而无需修改应用程序代码

spark.conf.set("spark.executor.memory", "4g")
使用 spark-submit 提交应用程序时,通过命令行参数来覆盖这个设置,比如:

spark-submit --conf spark.executor.memory=6g your_app.py

在这种情况下,spark-submit 中指定的 spark.executor.memory=6g 参数值会覆盖应用程序代码中设置的 spark.executor.memory=4g,使得 Executor 的内存大小最终为 6GB 而不是 4GB。这样就实现了通过命令行动态调整应用程序配置参数的效果。
相关推荐
宝贝儿好41 分钟前
【强化学习实战】第十一章:Gymnasium库的介绍和使用(1)、出租车游戏代码详解(Sarsa & Q learning)
人工智能·python·深度学习·算法·游戏·机器学习
程序媛一枚~4 小时前
✨✨✨使用Python,OpenCV及图片拼接生成❤️LOVE❤️字样图,每张小图加随机颜色边框,大图加随机大小随机颜色边框
图像处理·python·opencv·numpy·图像拼接
MediaTea4 小时前
Python:collections.Counter 常用函数及应用
开发语言·python
如若1234 小时前
flash-attn 安装失败?从报错到成功的完整排雷指南(CUDA 12.8 + PyTorch 2.7)
人工智能·pytorch·python
007张三丰4 小时前
知乎高赞回答爬虫:从零开始,建立你的专属知识库
爬虫·python·知识库·python爬虫·知乎·高赞回答
李昊哲小课5 小时前
Python json模块完整教程
开发语言·python·json
易醒是好梦5 小时前
Python flask demo
开发语言·python·flask
怪侠_岭南一只猿5 小时前
爬虫工程师入门阶段一:基础知识点完全学习文档
css·爬虫·python·学习·html
易龙祥5 小时前
批量下载IGS气象文件(利用python爬虫下载igs的气象数据)
python·igs·气象文件
阿_旭5 小时前
基于YOLO26深度学习的交警手势识别系统【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·交警手势识别