Tian Gao created SPARK-60855:
--------------------------------

             Summary: Remove the Spark JAR from the Python worker PYTHONPATH
                 Key: SPARK-60855
                 URL: https://issues.apache.org/jira/browse/SPARK-60855
             Project: Spark
          Issue Type: Improvement
          Components: Spark Core
    Affects Versions: 5.0.0
            Reporter: Tian Gao


PythonUtils.sparkPythonPath adds SparkContext.jarOfObject(this), i.e. the 
spark-core JAR, to the PYTHONPATH of every Python process Spark launches 
(Python workers, PythonRunner, Python UDF workers).

That entry dates from SPARK-1549 (Spark 1.0), when SPARK-1004 packaged 
pyspark/*.py and py4j into the core/assembly JAR so PySpark on YARN could 
import them from the JAR. SPARK-6869 started shipping pyspark.zip and the py4j 
zip to YARN separately, and SPARK-7485 (Spark 1.4) removed the Python files 
from the JAR, but the PYTHONPATH entry was never removed. No Spark build has 
put Python sources into a JAR since 1.4 (the spark-core 4.0.0 JAR has 5,261 
entries and no .py/.pyc files).

The entry is not free. Python creates a zipimporter for it and reads the JAR's 
central directory, and every top-level import that misses pyspark.zip and py4j 
probes it. Python workers also call importlib.invalidate_caches() when they add 
Spark files to sys.path; that re-reads the JAR directory once per new worker, 
on Python 3.11-3.12 directly and on 3.13+ lazily through the importlib.metadata 
import done by invalidate_caches(). In setup_spark_files this costs about 7-15 
ms per new worker (e.g. 13.5 ms -> 4.9 ms on Python 3.13).

Remove the entry.




--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to