章
目
录
咱做开发的,都想有个顺手的开发环境,今天就唠唠怎么用阿里云的PyODPS3和MaxFrame搭建一个高效的本地开发环境,老实用了,学会不亏!
一、前期环境准备工作
(一)搞定Python环境
Python版本有要求,3.7或者3.11这俩版本才行,MaxFrame就支持这俩,为啥呢?主要是为了保证稳定性,要是版本不对,后续指不定出啥幺蛾子。要是你系统里还没装Python,赶紧去装。要是装了Python,但没预装pip,那就去Python官网找安装指南,跟着步骤来就行。
(二)创建MaxCompute项目
接着得在阿里云控制台搞一个MaxCompute项目。创建完了,把项目名称和Endpoint记好咯,这俩后面要用。打个比方,假如项目名称叫my_project
,Endpoint是http://service.cn.maxcompute.aliyun.com/api
,就像这样记清楚。
(三)配置AccessKey
AccessKey也得配置一下,咱得设置ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
这俩环境变量,不然连不上MaxCompute项目。咋设置呢?看下面代码示例:
export ALIBABA_CLOUD_ACCESS_KEY_ID="your_access_key_id"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your_access_key_secret"
就是把your_access_key_id
和your_access_key_secret
换成你自己的AccessKey就行。
二、安装必备组件,一个都不能少
(一)安装MaxFrame
组件安装走起!先装MaxFrame,用下面这条命令:
pip install --upgrade maxframe
装完了还得验证一下,看看有没有安装成功。用这条命令:
python -c "import maxframe.dataframe as md"
要是没报错,那就说明安装妥了。
(二)安装PyODPS
要是你还没装PyODPS,也别慌,用pip安装就行,命令如下:
pip install pyodps
三、搭建本地Cursor环境
(一)创建MaxFrame会话
环境搭好,咱就可以在Python脚本里创建MaxFrame会话啦。下面这段代码就是示例:
import os
import maxframe.dataframe as md
from odps import ODPS
from maxframe import new_session
# 创建MaxCompute入口,这里通过os.getenv获取之前配置的AccessKey,然后指定项目名和Endpoint
o = ODPS(
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='my_project',
endpoint='http://service.cn.maxcompute.aliyun.com/api',
)
# 创建MaxFrame会话,有了这个会话,后续就能用MaxFrame进行各种操作啦
session = new_session(o)
(二)用MaxFrame操作数据
创建好会话,就能用MaxFrame搞数据操作了。看下面这些示例代码,从创建表、写入数据,到读取表数据处理、写入新表,一套流程都有:
# 创建表,这里创建了一个名为test_source_table的表,有两列,a是字符串类型,b是bigint类型,if_not_exists=True表示如果表不存在就创建
table = o.create_table("test_source_table", "a string, b bigint", if_not_exists=True)
# 打开表的写入器,往表里写入数据
with table.open_writer() as writer:
writer.write([["value1", 0], ["value2", 1]])
# 读取表并进行数据处理,以b列为索引读取test_source_table表数据,然后给a列数据都加上prefix_前缀
df = md.read_odps_table("test_source_table", index_col="b")
df["a"] = "prefix_" + df["a"]
# 打印处理后的数据,execute()方法执行操作,fetch()获取结果并打印
print(df.execute().fetch())
# 将处理后的数据写入新表,把处理后的df数据写入test_prefix_source_table表,execute()执行写入操作
md.to_odps_table(df, "test_prefix_source_table").execute()
# 销毁会话,操作结束后记得销毁会话,释放资源
session.destroy()
四、技巧
(一)用好DataWorks集成环境
DataWorks集成环境可太好用了。这里面有PyODPS 3节点,咱直接在DataWorks里创建这个节点,就能开发和运行MaxFrame作业,而且还能利用它的任务调度能力,方便得很。还有MaxCompute Notebook集成,MaxFrame和它集成之后,直接就能用交互式开发环境,自动化打包、多版本Python支持都有,这开发效率不得蹭蹭往上涨?
(二)发挥MaxFrame的分布式能力
MaxFrame的分布式能力也得好好利用起来。用它可以直接在MaxCompute集群里计算,不用把数据拉到本地,这作业执行效率能不高吗?而且它100%兼容Pandas,写代码的时候就跟用Pandas一样,写好之后自动分布式执行,开发难度一下子就降低了不少。
(三)实际案例:数据处理和分析
咱来个实际案例感受一下。假设现在有个用户信息表,想统计每个城市的用户数量,用MaxFrame来做,代码如下:
# 读取用户信息表,以id列为索引读取user_info表数据
df = md.read_odps_table("user_info", index_col="id")
# 添加城市信息,从address字段里提取城市信息,以逗号分割,取第一个元素作为城市
df['city'] = df['address'].apply(lambda x: x.split(',')[0])
# 统计每个城市的用户数量,按city分组,统计每组的数量,并重命名列为count
city_counts = df.groupby('city').size().reset_index(name='count')
# 打印结果,execute()执行操作,fetch()获取结果并打印
print(city_counts.execute().fetch())
就这么几步,一个高效的本地开发环境就搭建好啦,用MaxFrame和PyODPS3处理数据、搞开发,那效率杠杠的,赶紧动手试试吧!