为了在pyspark中执行Spark,需要两个组件一起工作:
pyspark
python包
- JVM中的Spark实例
在使用spark-submit或pyspark启动事物时,这些脚本将同时处理这两个脚本,即它们设置了PYTHONPATH,PATH等,以便您的脚本可以找到pyspark,并且它们还启动spark实例,并根据您的参数进行配置,例如--master X
另外,也可以绕过这些脚本,并直接在python解释器中运行spark应用程序python myscript.py
。当spark脚本开始变得更加复杂并最终收到自己的args时,这尤其有趣。
- 确保pyspark软件包可以被Python解释器找到。如前所述,可以将spark / python目录添加到PYTHONPATH或使用pip install直接安装pyspark。
- 从您的脚本(曾经传递给pyspark的脚本)中设置spark实例的参数。
- 对于通常使用--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())