对于 pyspark 中的 Spark 执行,需要两个组件一起工作:
pyspark
蟒蛇包
- JVM 中的 Spark 实例
当使用 spark-submit 或 pyspark 启动东西时,这些脚本会同时处理这两个问题,即它们设置您的 PYTHONPATH、PATH 等,以便您的脚本可以找到 pyspark,并且它们还会启动 spark 实例,根据您的参数进行配置,例如 --master X
或者,可以绕过这些脚本并直接在 python 解释器中运行您的 spark 应用程序,例如python myscript.py
. 当 spark 脚本开始变得更加复杂并最终接收到自己的 args 时,这一点尤其有趣。
- 确保 Python 解释器可以找到 pyspark 包。如前所述,要么将 spark/python 目录添加到 PYTHONPATH,要么使用 pip install 直接安装 pyspark。
- 从您的脚本中设置 spark 实例的参数(那些曾经传递给 pyspark 的参数)。
- 对于您通常使用 --conf 设置的 spark 配置,它们是使用 SparkSession.builder.config 中的配置对象(或字符串配置)定义的
- 对于主要选项(如 --master 或 --driver-mem),您可以通过写入 PYSPARK_SUBMIT_ARGS 环境变量来设置它们。为了让事情变得更干净、更安全,您可以在 Python 本身中设置它,并且 spark 会在启动时读取它。
- 启动实例,它只需要您
getOrCreate()
从构建器对象调用。
因此,您的脚本可以具有以下内容:
from pyspark.sql import SparkSession
if __name__ == "__main__":
if spark_main_opts:
# Set main options, e.g. "--master local[4]"
os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-shell"
# Set spark config
spark = (SparkSession.builder
.config("spark.checkpoint.compress", True)
.config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11")
.getOrCreate())