PyODPS是MaxCompute的Python版本的SDK,提供简单方便的Python编程接口。PyODPS支持类似Pandas的快速,灵活和富有表现力的数据结构。您可以通过PyODPS提供的DataFrame API使用Pandas的数据结果处理功能。本文用于帮助您快速开始使用PyODPS,并且能够用于实际项目。

前提条件

请您首先确保已开通MaxCompute及DataWorks服务,登录DataWorks数据开发控制台,详情请参见开通MaxCompute

背景信息

MaxCompute大多数开发都可以通过SQL方式实现,但对于复杂的业务场景以及自定义UDF函数都需使用Python的能力,应用场景举例如下:
  • 接口对接

    例如:MaxCompute表的每条数据,都需要通过身份证号码和外部HTTP的验证接口进行打通。

  • 异步调用

    例如:对于上千个处理逻辑相似的任务,如果对于不同任务都单独创建一个节点,不利于管理,并且在同一时间会占用过多资源。利用PyODPS可以异步生成SQL执行任务队列,通过队列实现任务数的并发,方便统一管理所有节点。

  • UDF

    例如:当MaxCompute内置函数无法满足需求时,需要快速开发UDF自定义函数。例如,要针对DECIMAL类型进行千分位数字格式化展示。

  • 提升SQL性能

    例如:要计算库存事务是否遵循先进先出的规则。由于只有一张表,每条数据都需要跟历史数据进行比对,而通常库存事务表体量巨大,时间复杂度是O(N²),往往无法运行处历史至今的结果。用Python结合Cache循环每条记录,只需遍历一次即可,时间复杂度是O(N),可极大提升效率。

  • 其他SQL很难解决的场景

    例如:金额分摊模型,10元由3个人均分,把尾差摊到其中一人身上。

其他PyODPS常见应用场景参见:

操作步骤

  1. 新建PyODPS节点
    为方便您快速开始,本文中使用DataWorks PyODPS节点进行开发,详情请参见PyODPS节点
    说明 PyODPS节点底层的Python版本为2.7 。

    PyODPS节点获取到本地处理的数据不能超过50MB,节点运行时占用内存不能超过1G,否则节点任务会被系统Kill,请避免在PyODPS任务中写额外的Python数据处理代码。

    在DataWorks上编写代码并进行调试效率较低,为提升运行效率,建议本地安装IDE进行代码开发,详情请参见安装指南

    1. 新建业务流程
      右键单击数据开发下的业务流程,选择新建业务流程

    2. 新建节点
      右键单击数据开发,选择新建数据开发节点 > PyODPS

  2. 编辑PyODPS节点
    1. 编写程序代码

      以下为Hello World测试代码。

      import time                   #与Java类似,调用额外的SDK需要先进行模块的导入。
      import datetime               #本例中只用到print函数。
      import base64
      import hashlib
      import httplib
      import json
      import sys
      import csv
      from odps import ODPS         #与ODPS调用相关的SDK需要增加这个模块导入。
      def main():
          print"Hello World"        #往日志文件输出。
      if __name__ == "__main__":    #程序的主入口。
          main()
    2. 运行代码
      完成编辑后,点击运行按钮即可,您可以在下方的运行日志中看到运行结果。

      此时您已完成了第一段代码。代码的主入口通过if __name__ == "__main__"进行判断,该语句只有直接运行此脚本时才会生效(name=main)。当作为模块被其他代码文件引用时,不会生效(name=py文件名)。