สำหรับการดำเนินการ Spark ใน pyspark จำเป็นต้องมีส่วนประกอบสองอย่างในการทำงานร่วมกัน:
pyspark
แพ็คเกจหลาม
- Spark อินสแตนซ์ใน JVM
เมื่อเปิดใช้งานสิ่งต่างๆด้วย spark-submit หรือ pyspark สคริปต์เหล่านี้จะดูแลทั้งสองอย่างเช่นพวกเขาตั้งค่า PYTHONPATH เส้นทาง ฯลฯ ของคุณเพื่อให้สคริปต์ของคุณสามารถค้นหา pyspark และพวกเขายังเริ่มต้นอินสแตนซ์ spark โดยกำหนดค่าตามพารามิเตอร์ของคุณ เช่น - master X
หรืออาจเป็นไปได้ที่จะข้ามสคริปต์เหล่านี้และเรียกใช้แอปพลิเคชัน spark ของคุณโดยตรงในตัวแปล python เช่นpython myscript.py
. สิ่งนี้น่าสนใจอย่างยิ่งเมื่อสคริปต์จุดประกายเริ่มซับซ้อนขึ้นและในที่สุดก็ได้รับ args ของตัวเอง
- ตรวจสอบให้แน่ใจว่า Python interpreter สามารถหาแพ็คเกจ pyspark ได้ ตามที่ได้กล่าวไปแล้วไม่ว่าจะเพิ่ม spark / python dir ไปยัง PYTHONPATH หรือติดตั้ง pyspark โดยตรงโดยใช้ pip install
- ตั้งค่าพารามิเตอร์ของอินสแตนซ์ spark จากสคริปต์ของคุณ (พารามิเตอร์ที่เคยถูกส่งไปยัง pyspark)
- สำหรับการกำหนดค่าจุดประกายตามที่คุณตั้งไว้ตามปกติด้วย --conf จะถูกกำหนดด้วยออบเจ็กต์ config (หรือการกำหนดค่าสตริง) ใน SparkSession.builder.config
- สำหรับตัวเลือกหลัก (เช่น --master หรือ --driver-mem) ในตอนนี้คุณสามารถตั้งค่าได้โดยเขียนไปยังตัวแปรสภาพแวดล้อม PYSPARK_SUBMIT_ARGS เพื่อให้สิ่งต่างๆสะอาดและปลอดภัยยิ่งขึ้นคุณสามารถตั้งค่าจากภายใน Python เองและประกายไฟจะอ่านเมื่อเริ่มต้น
- เริ่มต้นอินสแตนซ์ซึ่งคุณต้องเรียกใช้
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())