本文为您介绍如何在PyODPS中使用第三方包。

前提条件

请提前开通MaxCompute和DataWorks服务。

操作步骤

  1. 下载下表中的资源包。
    包名 文件名 上传资源名
    python-dateutil python-dateutil-2.6.0.zip python-dateutil.zip
    pytz pytz-2017.2.zip pytz.zip
    six six-1.11.0.tar.gz six.tar.gz
    pandas pandas-0.20.2-cp27-cp27m-manylinux1_x86_64.zip pandas.zip
    scipy scipy-0.19.0-cp27-cp27m-manylinux1_x86_64.zip scipy.zip
    scikit-learn scikit_learn-0.18.1-cp27-cp27m-manylinux1_x86_64.zip sklearn.zip
  2. 新建业务流程。
    1. 进入数据开发,右键单击业务流程,选择新建业务流程
    2. 新建业务流程页面,输入业务名称,单击新建完成。
  3. 在DataWorks中进行资源的创建与提交。
    1. 右键单击业务流程,选择新建 > MaxCompute > 资源 > Archive,完成Archive资源的新建。
    2. 新建资源对话框中,单击点击上传,选择python-dateutil-2.6.0.zip文件。点击上传资源
    3. 将资源名称重命名为python.dateutil.zip,单击确定资源重命名
    4. 单击提交按钮,完成本次上传。提交资源
    5. 按照上述步骤完成资源pytz.zipsix.tar.gzpandas.zipsklearn.zipscipy.zip的创建与提交。
  4. 新建PyODPS节点,并将节点名称修改为第三方包的使用。
    代码如下。
    def test(x):
        from sklearn import datasets, svm
        from scipy import misc
        import numpy as np
    
        iris = datasets.load_iris()
        assert iris.data.shape == (150, 4)
        assert np.array_equal(np.unique(iris.target),  [0, 1, 2])
    
        clf = svm.LinearSVC()
        clf.fit(iris.data, iris.target)
        pred = clf.predict([[5.0, 3.6, 1.3, 0.25]])
        assert pred[0] == 0
    
        assert misc.face().shape is not None
    
        return x
    
    from odps import options
    
    hints = {
        'odps.isolation.session.enable': True
    }
    libraries = ['python-dateutil.zip', 'pytz.zip', 'six.tar.gz', 'pandas.zip', 'scipy.zip', 'sklearn.zip']
    
    iris = o.get_table('pyodps_iris').to_df()
    
    print iris[:1].sepallength.map(test).execute(hints=hints, libraries=libraries)
    					
  5. 单击运行按钮。
  6. 运行日志中查看运行结果,如下所示。
    Sql compiled:
    CREATE TABLE tmp_pyodps_a3172c30_a0d7_4c88_bc39_434168263897 LIFECYCLE 1 AS
    SELECT pyodps_udf_1576485276_94d9d978_af66_4e27_a874_e787022dfb3d(t1.`sepallength`) AS `sepallength`
    FROM WB_BestPractice_dev.`pyodps_iris` t1
    LIMIT 1
    
    Instance ID: 20191216083438175gcv6n4pr2
      Log view: http://logview.odps.aliyun.com/logview/?h=xxxxxx
    
       sepallength
    0          5.1