本文為您介紹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檔案。