日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

PySpark開發示例

本文為您介紹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客戶端提交

    1. Spark客戶端配置。

      • 配置Spark客戶端。

      • 在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包或者直接采用公共資源。

    2. 提交運行。

      # 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節點提交。

    1. 創建Spark節點:創建方式請參考開發ODPS Spark任務

    2. 提交運行。

      在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

    3. 資源上傳。

      # 修改業務邏輯代碼包的后綴名為.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;
    4. 任務配置與執行。

      • 配置任務配置與執行

      • 執行執行

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版本。使用方式如下:

    1. 將WHEEL包重命名為ZIP包,例如將pymysql的WHEEL包重命名為pymysql.zip。

    2. 將重命名后的ZIP包上傳,文件類型為ARCHIVE。

    3. 在DataWorks Spark節點引用,文件類型為ARCHIVE。

    4. 在代碼中修改環境變量后即可導入。

      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客戶端為例,使用方式如下。

      1. 在MaxCompute客戶端中執行如下命令添加資源。

        add archive /your/path/to/py37.tar.gz -f;
      2. 在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的打包步驟如下。

    1. 在安裝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
                                                    
    2. 構建鏡像并運行容器。

      # 在Dockerfile文件的目錄下運行如下命令。
      docker build -t python-centos:3.7 
      docker run -itd --name python3.7 python-centos:3.7
    3. 進入容器安裝所需的Python依賴庫。

      docker attach python3.7
      pip install [所需依賴庫]
    4. 打包Python環境。

      cd /usr/local/
      zip -r python3.7.zip python3/
    5. 拷貝容器中的Python環境到宿主機。

      # 退出容器
      ctrl+P+Q
      # 在宿主機運行命令。
      docker cp python3.7:/usr/local/python3.7.zip 
    6. 上傳Python3.7.zip包為MaxCompute資源。DataWorks最大只能上傳50 MB的包,如果大于50 MB可以通過MaxCompute客戶端上傳,文件類型為ARCHIVE。上傳資源操作,請參見添加資源

      add archive /path/to/python3.7.zip -f;
    7. 提交作業時只需要在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"文件,步驟如下:

    1. 將用戶代碼打包為ZIP包,需要在目錄下自定義一個空白的__init__.py。

    2. 將用戶代碼ZIP包以MaxCompute資源形式上傳,并重命名,該資源在工作目錄中將會被解壓。

      說明

      MaxCompute支持上傳的資源類型請參考資源

    3. 配置參數spark.executorEnv.PYTHONPATH=

    4. 完成上述步驟,主Python文件就可以導入該目錄下的Python文件。