本文為您介紹PySpark開發示例。
如果要訪問MaxCompute表,則需要編譯datasource包,詳細步驟請參見搭建Linux開發環境。
SparkSQL應用示例(Spark1.6)
詳細代碼
from pyspark import SparkContext, SparkConf
from pyspark.sql import OdpsContext
if __name__ == '__main__':
conf = SparkConf().setAppName("odps_pyspark")
sc = SparkContext(conf=conf)
sql_context = OdpsContext(sc)
sql_context.sql("DROP TABLE IF EXISTS spark_sql_test_table")
sql_context.sql("CREATE TABLE spark_sql_test_table(name STRING, num BIGINT)")
sql_context.sql("INSERT INTO TABLE spark_sql_test_table SELECT 'abc', 100000")
sql_context.sql("SELECT * FROM spark_sql_test_table").show()
sql_context.sql("SELECT COUNT(*) FROM spark_sql_test_table").show()
提交運行
./bin/spark-submit \
--jars cupid/odps-spark-datasource_xxx.jar \
example.py
SparkSQL應用示例(Spark2.3)
詳細代碼
from pyspark.sql import SparkSession
if __name__ == '__main__':
spark = SparkSession.builder.appName("spark sql").getOrCreate()
spark.sql("DROP TABLE IF EXISTS spark_sql_test_table")
spark.sql("CREATE TABLE spark_sql_test_table(name STRING, num BIGINT)")
spark.sql("INSERT INTO spark_sql_test_table SELECT 'abc', 100000")
spark.sql("SELECT * FROM spark_sql_test_table").show()
spark.sql("SELECT COUNT(*) FROM spark_sql_test_table").show()
提交運行
Cluster模式提交運行
spark-submit --master yarn-cluster \ --jars cupid/odps-spark-datasource_xxx.jar \ example.py
Local模式運行
cd $SPARK_HOME ./bin/spark-submit --master local[4] \ --driver-class-path cupid/odps-spark-datasource_xxx.jar \ /path/to/odps-spark-examples/spark-examples/src/main/python/spark_sql.py
說明Local模式訪問表需要依賴Tunnel。
Local模式要用--driver-class-path而非--jars。
Spark SQL應用示例(Spark2.4)
相關代碼如下,您需要在本地創建Python項目,自行打包。
spark-test.py
# -*- coding: utf-8 -*- import os from pyspark.sql import SparkSession from mc.service.udf.udfs import udf_squared, udf_numpy def noop(x): import socket import sys host = socket.gethostname() + ' '.join(sys.path) + ' '.join(os.environ) print('host: ' + host) print('PYTHONPATH: ' + os.environ['PYTHONPATH']) print('PWD: ' + os.environ['PWD']) print(os.listdir('.')) return host if __name__ == '__main__': # 本地調試時添加,MaxCompute運行時需要刪除,否則會報錯 # .master("local[4]") \ spark = SparkSession \ .builder \ .appName("test_pyspark") \ .getOrCreate() sc = spark.sparkContext # 驗證系統當前環境變量 rdd = sc.parallelize(range(10), 2) hosts = rdd.map(noop).distinct().collect() print(hosts) # 驗證UDF # https://docs.databricks.com/spark/latest/spark-sql/udf-python.html# spark.udf.register("udf_squared", udf_squared) spark.udf.register("udf_numpy", udf_numpy) tableName = "test_pyspark1" df = spark.sql("""select id, udf_squared(age) age1, udf_squared(age) age2, udf_numpy() udf_numpy from %s """ % tableName) print("rdf count, %s\n" % df.count()) df.show()
udfs.py
# -*- coding: utf-8 -*- import numpy as np def udf_squared(s): """ spark udf :param s: :return: """ if s is None: return 0 return s * s def udf_numpy(): rand = np.random.randn() return rand if __name__ == "__main__": print(udf_numpy())
提交運行
Spark客戶端提交
Spark客戶端配置。
配置Spark客戶端。
Linux系統配置方式請參考搭建Linux開發環境。
Windows系統配置方式請參考搭建Windows開發環境。
在Spark客戶端
conf
文件夾下的spark-defaults.conf中添加以下配置項(以公共資源為例):spark.hadoop.odps.cupid.resources = public.python-2.7.13-ucs4.tar.gz spark.pyspark.python = ./public.python-2.7.13-ucs4.tar.gz/python-2.7.13-ucs4/bin/python
說明上述配置項的值為Python包所在路徑,您可以選擇使用自行下載的Python包或者直接采用公共資源。
提交運行。
# mc_pyspark-0.1.0-py3-none-any.zip為通用業務邏輯代碼 spark-submit --py-files mc_pyspark-0.1.0-py3-none-any.zip spark-test.py
說明如遇到自行下載的第三方依賴包不匹配問題
ImportError: cannot import name _distributor_init
,建議直接使用公共資源,詳情請參考PySpark Python版本和依賴支持。
DataWorks Spark節點提交。
創建Spark節點:創建方式請參考開發ODPS Spark任務。
提交運行。
在DataWorks的ODPS Spark節點配置以下參數:
參數名
配置詳情
spark版本
Spark2.x
語言
Python
選擇主python資源
spark_test.py
配置項
-- 資源申請相關配置 spark.executor.instances=3 spark.executor.cores=1 spark.executor.memory=4g spark.driver.cores=1 spark.driver.memory=4g -- spark.executorEnv.PYTHONPATH=. spark.yarn.appMasterEnv.PYTHONPATH=. -- 指定需要引用的資源 spark.hadoop.odps.cupid.resources = public.python-2.7.13-ucs4.tar.gz spark.pyspark.python = ./public.python-2.7.13-ucs4.tar.gz/python-2.7.13-ucs4/bin/python
選擇python資源
mc_pyspark-0.1.0-py3-none-any.zip
資源上傳。
# 修改業務邏輯代碼包的后綴名為.zip cp /Users/xxx/PycharmProjects/mc-pyspark/dist/mc_pyspark-0.1.0-py3-none-any.whl /Users/xxx/PycharmProjects/mc-pyspark/dist/mc_pyspark-0.1.0-py3-none-any.zip # 在ODPSCMD添加到MaxCompute資源中 add archive /Users/xxx/PycharmProjects/mc-pyspark/dist/mc_pyspark-0.1.0-py3-none-any.zip -f;
任務配置與執行。
配置
執行
Package依賴
由于MaxCompute集群無法自由安裝Python庫,PySpark依賴其它Python庫、插件、項目時,通常需要在本地打包后通過Spark-submit上傳。對于特定依賴,打包環境需與線上環境保持一致。打包方式如下,請根據業務的復雜度進行選擇:
不打包直接采用公共資源
默認提供Python 2.7.13環境配置
spark.hadoop.odps.cupid.resources = public.python-2.7.13-ucs4.tar.gz spark.pyspark.python = ./public.python-2.7.13-ucs4.tar.gz/python-2.7.13-ucs4/bin/python
第三方庫列表如下。
$./bin/pip list Package Version ----------------------------- ----------- absl-py 0.11.0 aenum 2.2.4 asn1crypto 0.23.0 astor 0.8.1 astroid 1.6.1 atomicwrites 1.4.0 attrs 20.3.0 backports.functools-lru-cache 1.6.1 backports.lzma 0.0.14 backports.weakref 1.0.post1 beautifulsoup4 4.9.3 bleach 2.1.2 boto 2.49.0 boto3 1.9.147 botocore 1.12.147 bz2file 0.98 cachetools 3.1.1 category-encoders 2.2.2 certifi 2019.9.11 cffi 1.11.2 click 6.7 click-plugins 1.1.1 cligj 0.7.0 cloudpickle 0.5.3 configparser 4.0.2 contextlib2 0.6.0.post1 cryptography 2.6.1 cssutils 1.0.2 cycler 0.10.0 Cython 0.29.5 dask 0.18.1 DBUtils 1.2 decorator 4.2.1 docutils 0.16 entrypoints 0.2.3 enum34 1.1.10 fake-useragent 0.1.11 Fiona 1.8.17 funcsigs 1.0.2 functools32 3.2.3.post2 future 0.16.0 futures 3.3.0 gast 0.2.2 gensim 3.8.3 geopandas 0.6.3 getpass3 1.2 google-auth 1.23.0 google-auth-oauthlib 0.4.1 google-pasta 0.2.0 grpcio 1.33.2 h5py 2.7.0 happybase 1.1.0 html5lib 1.0.1 idna 2.10 imbalanced-learn 0.4.3 imblearn 0.0 importlib-metadata 2.0.0 ipaddress 1.0.23 ipython-genutils 0.2.0 isort 4.3.4 itchat 1.3.10 itsdangerous 0.24 jedi 0.11.1 jieba 0.42.1 Jinja2 2.10 jmespath 0.10.0 jsonschema 2.6.0 kafka-python 1.4.6 kazoo 2.5.0 Keras-Applications 1.0.8 Keras-Preprocessing 1.1.2 kiwisolver 1.1.0 lazy-object-proxy 1.3.1 libarchive-c 2.8 lightgbm 2.3.1 lml 0.0.2 lxml 4.2.1 MarkupSafe 1.0 matplotlib 2.2.5 mccabe 0.6.1 missingno 0.4.2 mistune 0.8.3 mock 2.0.0 more-itertools 5.0.0 munch 2.5.0 nbconvert 5.3.1 nbformat 4.4.0 networkx 2.1 nose 1.3.7 numpy 1.16.1 oauthlib 3.1.0 opt-einsum 2.3.2 packaging 20.4 pandas 0.24.2 pandocfilters 1.4.2 parso 0.1.1 pathlib2 2.3.5 patsy 0.5.1 pbr 3.1.1 pexpect 4.4.0 phpserialize 1.3 pickleshare 0.7.4 Pillow 6.2.0 pip 20.2.4 pluggy 0.13.1 ply 3.11 prompt-toolkit 2.0.1 protobuf 3.6.1 psutil 5.4.3 psycopg2 2.8.6 ptyprocess 0.5.2 py 1.9.0 py4j 0.10.6 pyasn1 0.4.8 pyasn1-modules 0.2.8 pycosat 0.6.3 pycparser 2.18 pydot 1.4.1 Pygments 2.2.0 pykafka 2.8.0 pylint 1.8.2 pymongo 3.11.0 PyMySQL 0.10.1 pynliner 0.8.0 pyodps 0.9.3.1 pyOpenSSL 17.5.0 pyparsing 2.2.0 pypng 0.0.20 pyproj 2.2.2 PyQRCode 1.2.1 pytest 4.6.11 python-dateutil 2.8.1 pytz 2020.4 PyWavelets 0.5.2 PyYAML 3.12 redis 3.2.1 requests 2.25.0 requests-oauthlib 1.3.0 rope 0.10.7 rsa 4.5 ruamel.ordereddict 0.4.15 ruamel.yaml 0.11.14 s3transfer 0.2.0 scandir 1.10.0 scikit-image 0.14.0 scikit-learn 0.20.3 scipy 1.2.3 seaborn 0.9.1 Send2Trash 1.5.0 setuptools 41.0.0 Shapely 1.7.1 simplegeneric 0.8.1 singledispatch 3.4.0.3 six 1.15.0 sklearn2 0.0.13 smart-open 1.8.1 soupsieve 1.9.6 SQLAlchemy 1.3.20 statsmodels 0.11.0 subprocess32 3.5.4 tabulate 0.8.7 tensorflow 2.0.0 tensorflow-estimator 2.0.1 termcolor 1.1.0 testpath 0.3.1 thriftpy 0.3.9 timeout-decorator 0.4.1 toolz 0.9.0 tqdm 4.32.2 traitlets 4.3.2 urllib3 1.24.3 wcwidth 0.2.5 webencodings 0.5.1 Werkzeug 1.0.1 wheel 0.35.1 wrapt 1.11.1 xgboost 0.82 xlrd 1.2.0 XlsxWriter 1.0.7 zipp 1.2.0
默認提供Python 3.7.9環境配置
spark.hadoop.odps.cupid.resources = public.python-3.7.9-ucs4.tar.gz spark.pyspark.python = ./public.python-3.7.9-ucs4.tar.gz/python-3.7.9-ucs4/bin/python3
第三方庫列表如下。
Package Version ----------------------------- ----------- appnope 0.1.0 asn1crypto 0.23.0 astroid 1.6.1 attrs 20.3.0 autopep8 1.3.4 backcall 0.2.0 backports.functools-lru-cache 1.5 backports.weakref 1.0rc1 beautifulsoup4 4.6.0 bidict 0.17.3 bleach 2.1.2 boto 2.49.0 boto3 1.9.147 botocore 1.12.147 bs4 0.0.1 bz2file 0.98 cached-property 1.5.2 cachetools 3.1.1 category-encoders 2.2.2 certifi 2019.11.28 cffi 1.11.2 click 6.7 click-plugins 1.1.1 cligj 0.7.0 cloudpickle 0.5.3 cryptography 2.6.1 cssutils 1.0.2 cycler 0.10.0 Cython 0.29.21 dask 0.18.1 DBUtils 1.2 decorator 4.2.1 docutils 0.16 entrypoints 0.2.3 fake-useragent 0.1.11 Fiona 1.8.17 future 0.16.0 gensim 3.8.3 geopandas 0.8.0 getpass3 1.2 h5py 3.1.0 happybase 1.1.0 html5lib 1.0.1 idna 2.10 imbalanced-learn 0.4.3 imblearn 0.0 importlib-metadata 2.0.0 iniconfig 1.1.1 ipykernel 5.3.4 ipython 7.19.0 ipython-genutils 0.2.0 isort 4.3.4 itchat 1.3.10 itsdangerous 0.24 jedi 0.11.1 jieba 0.42.1 Jinja2 2.10 jmespath 0.10.0 jsonschema 2.6.0 jupyter-client 6.1.7 jupyter-core 4.6.3 kafka-python 1.4.6 kazoo 2.5.0 kiwisolver 1.3.1 lazy-object-proxy 1.3.1 libarchive-c 2.8 lightgbm 2.3.1 lml 0.0.2 lxml 4.2.1 Mako 1.0.10 MarkupSafe 1.0 matplotlib 3.3.3 mccabe 0.6.1 missingno 0.4.2 mistune 0.8.3 mock 2.0.0 munch 2.5.0 nbconvert 5.3.1 nbformat 4.4.0 networkx 2.1 nose 1.3.7 numpy 1.19.4 packaging 20.4 pandas 1.1.4 pandocfilters 1.4.2 parso 0.1.1 patsy 0.5.1 pbr 3.1.1 pexpect 4.4.0 phpserialize 1.3 pickleshare 0.7.4 Pillow 6.2.0 pip 20.2.4 plotly 4.12.0 pluggy 0.13.1 ply 3.11 prompt-toolkit 2.0.1 protobuf 3.6.1 psutil 5.4.3 psycopg2 2.8.6 ptyprocess 0.5.2 py 1.9.0 py4j 0.10.6 pycodestyle 2.3.1 pycosat 0.6.3 pycparser 2.18 pydot 1.4.1 Pygments 2.2.0 pykafka 2.8.0 pylint 1.8.2 pymongo 3.11.0 PyMySQL 0.10.1 pynliner 0.8.0 pyodps 0.9.3.1 pyOpenSSL 17.5.0 pyparsing 2.2.0 pypng 0.0.20 pyproj 3.0.0.post1 PyQRCode 1.2.1 pytest 6.1.2 python-dateutil 2.8.1 pytz 2020.4 PyWavelets 0.5.2 PyYAML 3.12 pyzmq 17.0.0 qtconsole 4.3.1 redis 3.2.1 requests 2.25.0 retrying 1.3.3 rope 0.10.7 ruamel.yaml 0.16.12 ruamel.yaml.clib 0.2.2 s3transfer 0.2.0 scikit-image 0.14.0 scikit-learn 0.20.3 scipy 1.5.4 seaborn 0.11.0 Send2Trash 1.5.0 setuptools 41.0.0 Shapely 1.7.1 simplegeneric 0.8.1 six 1.15.0 sklearn2 0.0.13 smart-open 1.8.1 SQLAlchemy 1.3.20 statsmodels 0.12.1 tabulate 0.8.7 testpath 0.3.1 thriftpy 0.3.9 timeout-decorator 0.4.1 toml 0.10.2 toolz 0.9.0 tornado 6.1 tqdm 4.32.2 traitlets 4.3.2 urllib3 1.24.3 wcwidth 0.2.5 webencodings 0.5.1 wheel 0.35.1 wrapt 1.11.1 xgboost 1.2.1 xlrd 1.2.0 XlsxWriter 1.0.7 zipp 3.4.0
上傳單個WHEEL包
如果依賴較為簡單,則可以只上傳單個WHEEL包,通常需要選用manylinux版本。使用方式如下:
將WHEEL包重命名為ZIP包,例如將pymysql的WHEEL包重命名為pymysql.zip。
將重命名后的ZIP包上傳,文件類型為ARCHIVE。
在DataWorks Spark節點引用,文件類型為ARCHIVE。
在代碼中修改環境變量后即可導入。
sys.path.append('pymysql') import pymysql
利用腳本一鍵打包
若需要的額外依賴較多,上傳單個WHEEL包會導致重復操作量倍增。您可以下載腳本,只需提供一個編輯好的requirements文件,就能夠直接生成完整的Python環境用于PySpark使用,具體如下。
使用
$ chmod +x generate_env_pyspark.sh $ generate_env_pyspark.sh -h Usage: generate_env_pyspark.sh [-p] [-r] [-t] [-c] [-h] Description: -p ARG, the version of python, currently supports python 2.7, 3.5, 3.6 and 3.7 versions. -r ARG, the local path of your python requirements. -t ARG, the output directory of the gz compressed package. -c, clean mode, we will only package python according to your requirements, without other pre-provided dependencies. -h, display help of this script.
示例
# 帶有預裝依賴的打包方式 $ generate_env_pyspark.sh -p 3.7 -r your_path_to_requirements -t your_output_directory # 不帶預裝依賴的打包方式(clean mode) generate_env_pyspark.sh -p 3.7 -r your_path_to_requirements -t your_output_directory -c
說明
腳本適用于Mac或Linux環境,需要預先安裝Docker,安裝指導請參見Docker幫助文檔。
目前僅支持Python 2.7、3.5、3.6和3.7版本,如果對Python版本不敏感,推薦使用Python 3.7。
-c
選項表示是否開啟clean mode。clean mode無法使用預裝依賴,但輸出的Python包更小。各版本的依賴請參見Python 2.7預裝依賴、Python 3.5預裝依賴、Python 3.6預裝依賴、Python 3.7預裝依賴。當前MaxCompute對上傳資源的大小有500 MB的限制,因此如果大部分預裝依賴用不到,推薦使用
-c
選項打包。
Spark中使用
generate_env_pyspark.sh腳本的輸出為在指定目錄下(
-t
選項)生成指定Python版本(-p
選項)的GZ包。以Python3.7為例,將生成py37.tar.gz,后續再將此包上傳為ARCHIVE資源。您可以通過MaxCompute客戶端上傳,也可以使用odps-sdk上傳。各種資源操作,請參見資源操作。以MaxCompute客戶端為例,使用方式如下。在MaxCompute客戶端中執行如下命令添加資源。
add archive /your/path/to/py37.tar.gz -f;
在Spark配置中增加如下兩個參數。
spark.hadoop.odps.cupid.resources = your_project.py37.tar.gz spark.pyspark.python = your_project.py37.tar.gz/bin/python
若上述兩個參數不生效,還需在Spark作業中增加如下兩項配置。例如使用zeppelin調試Pyspark時,notebook中的Python環境配置。
spark.yarn.appMasterEnv.PYTHONPATH = ./your_project.py37.tar.gz/bin/python spark.executorEnv.PYTHONPATH = ./your_project.py37.tar.gz/bin/python
利用Docker容器打包Python環境
該方式適用于如下場景:
需要引入的依賴包含so文件時,無法通過上述ZIP文件的方式使用,無法進行
pip install
安裝。對除2.7、3.5、3.6、3.7以外的Python版本有特殊需求。
針對以上特殊情況,同時保證打包環境與線上環境一致(Mac打出來的Python環境與線上環境存在兼容性問題)。以Python3.7為例,基于Docker的打包步驟如下。
在安裝Docker環境的宿主機新建一個Dockerfile文件。
Python 3示例參考如下。
FROM centos:7.6.1810 RUN set -ex \ # 預安裝所需組件 && yum install -y wget tar libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make initscripts zip\ && wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz \ && tar -zxvf Python-3.7.0.tgz \ && cd Python-3.7.0 \ && ./configure prefix=/usr/local/python3 \ && make \ && make install \ && make clean \ && rm -rf /Python-3.7.0* \ && yum install -y epel-release \ && yum install -y python-pip # 設置默認為python3 RUN set -ex \ # 備份舊版本python && mv /usr/bin/python /usr/bin/python27 \ && mv /usr/bin/pip /usr/bin/pip-python27 \ # 配置默認為python3 && ln -s /usr/local/python3/bin/python3.7 /usr/bin/python \ && ln -s /usr/local/python3/bin/pip3 /usr/bin/pip # 修復因修改python版本導致yum失效問題 RUN set -ex \ && sed -i "s#/usr/bin/python#/usr/bin/python27#" /usr/bin/yum \ && sed -i "s#/usr/bin/python#/usr/bin/python27#" /usr/libexec/urlgrabber-ext-down \ && yum install -y deltarpm # 更新pip版本 RUN pip install --upgrade pip
Python 2示例參考如下。
FROM centos:7.6.1810 RUN set -ex \ # 預安裝所需組件 && yum install -y wget tar libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make initscripts zip\ && wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz \ && tar -zxvf Python-2.7.18.tgz \ && cd Python-2.7.18 \ && ./configure prefix=/usr/local/python2 \ && make \ && make install \ && make clean \ && rm -rf /Python-2.7.18* # 設置默認為python RUN set -ex \ && mv /usr/bin/python /usr/bin/python27 \ && ln -s /usr/local/python2/bin/python /usr/bin/python RUN set -ex \ && wget https://bootstrap.pypa.io/get-pip.py \ && python get-pip.py RUN set -ex \ && rm -rf /usr/bin/pip \ && ln -s /usr/local/python2/bin/pip /usr/bin/pip # 修復因修改python版本導致yum失效問題 RUN set -ex \ && sed -i "s#/usr/bin/python#/usr/bin/python27#" /usr/bin/yum \ && sed -i "s#/usr/bin/python#/usr/bin/python27#" /usr/libexec/urlgrabber-ext-down \ && yum install -y deltarpm # 更新pip版本 RUN pip install --upgrade pip
構建鏡像并運行容器。
# 在Dockerfile文件的目錄下運行如下命令。 docker build -t python-centos:3.7 docker run -itd --name python3.7 python-centos:3.7
進入容器安裝所需的Python依賴庫。
docker attach python3.7 pip install [所需依賴庫]
打包Python環境。
cd /usr/local/ zip -r python3.7.zip python3/
拷貝容器中的Python環境到宿主機。
# 退出容器 ctrl+P+Q # 在宿主機運行命令。 docker cp python3.7:/usr/local/python3.7.zip
上傳Python3.7.zip包為MaxCompute資源。DataWorks最大只能上傳50 MB的包,如果大于50 MB可以通過MaxCompute客戶端上傳,文件類型為ARCHIVE。上傳資源操作,請參見添加資源。
add archive /path/to/python3.7.zip -f;
提交作業時只需要在spark-default.conf或DataWorks配置項中添加以下配置即可。
spark.hadoop.odps.cupid.resources=[project名稱].python3.7.zip spark.pyspark.python=./[project名].python3.7.zip/python3/bin/python3.7
說明通過Docker容器打包,如果遇到so包找不到的情況,則需要手動將so包放到Python環境中。一般so包在容器中都能找到,并在Spark作業中添加以下環境變量。
spark.executorEnv.LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./[project名].python3.7.zip/python3/[創建的so包目錄] spark.yarn.appMasterEnv.LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./[project名].python3.7.zip/python3/[創建的so包目錄]
引用用戶自定義的Python包
通常情況下,用戶需要使用自定義的Python文件,可以打包提交,這樣避免了上傳多個".py"文件,步驟如下:
將用戶代碼打包為ZIP包,需要在目錄下自定義一個空白的__init__.py。
將用戶代碼ZIP包以MaxCompute資源形式上傳,并重命名,該資源在工作目錄中將會被解壓。
說明MaxCompute支持上傳的資源類型請參考資源。
配置參數
spark.executorEnv.PYTHONPATH=
。完成上述步驟,主Python文件就可以導入該目錄下的Python文件。