一、背景
PyODPS是MaxCompute的Python版本的SDK,提供简单方便的Python编程接口,对于不熟悉sql的开发工程师可以使用PyODPS。在使用 PyODPS会看到有一些对内存和数据大小的限制,但这些并非是PyODPS的限制,本质是对客户端DataWorks PyODPS节点的限制,PyODPS对数据的大小是没有限制的。很多人无法确定到底是运行在服务端还是客户端,本文介绍当出现相关问题时,如何确定代码在何处执行。
二、如何判断客户端和服务端
判断是否运行在服务端的标准,代码是否可以编译成sql运行。如:PyODPS DataFrame的内置算子,最终是编译成sql跑的。如果想使用自己的逻辑处理数据可以自定义函数。在DataWorks上新建PyODPS节点,相当于运行了一台服务器用于跑PyODPS脚本本质也是一个客户端。
发生在客户端的行为:
1.PyODPS DataFrame转化成Pandas的DataFrame
2.sql执行发生在服务端,将结果进行遍历发生在客户端。如;
result = o.execute_sql('select * from my_new_table;',hints={'odps.sql.allow.fullscan': 'true'}) with result.open_reader() as reader: for record in reader: print record[0],record[1]
发生在服务端的行为:
1.执行sql如
result = o.execute_sql('select * from my_new_table;',hints={'odps.sql.allow.fullscan': 'true'})
2.转化成PyODPS的DataFrame使用PyODPS DataFrame的算子, PyODPS DataFrame做运算的算子都是运行在服务端
除了head(),tail()这些查看结果的行为是运行在服务端
3.DataFrame使用自定义函数处理数据,处理单列数据可以用map函数,处理一行数据可以使用apply函数
具体可以参考官网自定义函数案例
三、客户端和服务端如何使用第三方包
DataWorks PyODPS客户端使用第三方包:
客户端使用第三方包都是运行在节点上的可以对数据量小的结果集处理,比如发送邮件
- 必须使用独享调度资源组,详情请参见新增独享调度资源组。
- 在独享调度资源组的运维助手中安装需要的三方包,详情请参见运维助手。PyODPS节点分为PyODPS 2和PyODPS 3:
- 如果依赖PyODPS 2节点,请执行如下命令。
pip install <需要安装的包> -i https://pypi.tuna.tsinghua.edu.cn/simple
- 执行命令后,如果提示需要升级PIP版本,请执行如下命令。
pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
- 如果依赖PyODPS 3节点,请执行如下命令。
/home/tops/bin/pip3 install <需要安装的包> -i https://pypi.tuna.tsinghua.edu.cn/simple
- 执行命令后,如果提示需要升级PIP版本,请执行如下命令。
/home/tops/bin/pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
服务端使用第三方包:
可以处理大量数据无限制
参考MaxCompute官网第三方包案例
大家如果对MaxCompute有更多咨询或者建议,欢迎扫码加入 MaxCompute开发者社区钉钉群,或点击链接 申请加入。