ODPS Python3开发UDF实践 dataworks平台

本文涉及的产品
大数据开发治理平台DataWorks,Serverless资源组抵扣包300CU*H
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: # 业务背景 花呗有一个生息产品叫做循环, 也就最低还款: 即每月进行最小还款, 剩下的金额产生利息. 用户每个月都可以进行最低还款的办理, 即还不掉的本金永远在里面滚着. 业务方想要知道一个业务指标, 就是用户连续办理了多少个月的循环, 然后针对这部分用户做精细化运营 # 解决思路 这个问题有两个解法 #### 1. ODPS SQL解法 每月月末跑一个数, 统计本月用户

业务背景

花呗有一个生息产品叫做循环, 也就最低还款: 即每月进行最小还款, 剩下的金额产生利息.
用户每个月都可以进行最低还款的办理, 即还不掉的本金永远在里面滚着.
业务方想要知道一个业务指标, 就是用户连续办理了多少个月的循环, 然后针对这部分用户做精细化运营

解决思路

这个问题有两个解法

1. ODPS SQL解法

每月月末跑一个数, 统计本月用户是否使用过循环, 开始月份是X月, X+1月有用过则把连续循环数+1, 没有用过则置零. 该方法的缺点是时效性问题, 即月末才能看到数据, 有些用户在月中就完成循环了.

2. ODPS UDF解法

拉取用户历史以来循环办理日期(中间层有个全量表可以直接取出数据), 通过日期数组直接判定是否连续循环, 该方法效率快, 准确性高, 数据时效性也好, 唯一麻烦的就是需要自己写UDF

后来评估了两个方法的开发量, 最后决定使用UDF实现这个功能, 所以接下来说说UDF的实践过程

D2开发Python3 UDF的流程简介

1. 本地开发Python3代码

虽然现在D2有Function Studio, 但是它只支持Python2.7, 不支持3的运行
所以我是本地先写个.py实现核心功能, 再弄到D2里面去, 用macOS开个terminal做测试特别方便.

2. 建立资源

2.1 ODPS Python改写

资源说白了就是实现核心功能的py模块, 但是这段代码需要进行ODPS规范的改造
1-引入模块odps.udf, 在每个类前加入一段@annotate的修饰符, 管理入参和出参格式, 但是入参的写法和python语法不太一样, 是遵循了ODPS的语法, 详见4条目
2-同时需要把本地的实现函数改为class
3-并且该类中只能调用evaluate方法实现核心功能

from odps.udf import annotate           # 引入odps包

@annotate("array<string> -> bigint")    # 修饰符, 入参 -> 出参
class CalMaxCycleCnt(object):           # 类名, 即要发布的函数名称
    def evaluate(self, date_lists):     # 实现方法, 必须写evaluate
        '''
        date_lists.sort(reverse=True)
        实现的功能的核心代码
        '''
        return max_cycle_cnt            # 返回结果, bigint

4-ODPS和PYTHON3参数格式转换
可先下图, 或见链接: https://tech.antfin.com/docs/2/154431
image.png

2.2 D2建立资源流程图

第一步, 新建

image.png

第二步, 填写资源名称

image.png

第三步, 贴上代码+提交发布

image.png

3. 引入函数

资源发布后, 可以把资源中的class作为函数引入到ODPS中

第一步, 新建

image.png

第二步, 填写函数名称, 此处填写class名称

image.png

第三步, 配置函数+提交发布

类名要填资源名称(不含py).类名, 如图中hb_2XXXXXX3_test.CalMaxCycleCnt, 否则定位不到函数
资源列表填资源名称.py即可, 如图中hb_2XXXXXX3_test.py
image.png

4. 线上验收测试

SELECT  user_id
        ,CalMaxCycleCnt( txn_dt_array ) AS max_cycle_cnt
FROM tbl_name

后记

1. 测试难

因为写的Python3, 无法测试环境测, 所以代码要尽可能写的完整, 不然BUG只能通过再次发布来修复

2. 注意NULL值

SQL的入参, 特别是多表关联的时候难免有NULL值, python的代码里面可以加这一段对NULL值初始化

if next_bill_date is None or len(next_bill_date)==0:
    next_bill_date=next_month_fst_day(bizdate)

如果直接对NULL值判定len, 则会报错

TypeError: object of type 'NoneType' has no len()
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
一站式大数据开发治理平台DataWorks初级课程
DataWorks 从 2009 年开始,十ー年里一直支持阿里巴巴集团内部数据中台的建设,2019 年双 11 稳定支撑每日千万级的任务调度。每天阿里巴巴内部有数万名数据和算法工程师正在使用DataWorks,承了阿里巴巴 99%的据业务构建。本课程主要介绍了阿里巴巴大数据技术发展历程与 DataWorks 几大模块的基本能力。 产品官网 https://www.aliyun.com/product/bigdata/ide 大数据&amp;AI体验馆 https://workbench.data.aliyun.com/experience.htm#/ 帮助文档https://help.aliyun.com/zh/dataworks 课程目标 &nbsp;通过讲师的详细讲解与实际演示,学员可以一边学习一边进行实际操作,可以深入了解DataWorks各大模块的使用方式和具体功能,让学员对DataWorks数据集成、开发、分析、运维、安全、治理等方面有深刻的了解,加深对阿里云大数据产品体系的理解与认识。 适合人群 &nbsp;企业数据仓库开发人员 &nbsp;大数据平台开发人员 &nbsp;数据分析师 &nbsp;大数据运维人员 &nbsp;对于大数据平台、数据中台产品感兴趣的开发者
相关文章
|
1月前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
80 7
|
1月前
|
机器学习/深度学习 人工智能 分布式计算
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
117 35
|
1月前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
199 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
1月前
|
数据采集 机器学习/深度学习 DataWorks
DataWorks产品评测:大数据开发治理的深度体验
DataWorks产品评测:大数据开发治理的深度体验
117 1
|
1月前
|
SQL 分布式计算 DataWorks
MaxCompute MaxFrame评测 | 分布式Python计算服务MaxFrame(完整操作版)
在当今数字化迅猛发展的时代,数据信息的保存与分析对企业决策至关重要。MaxCompute MaxFrame是阿里云自研的分布式计算框架,支持Python编程接口、兼容Pandas接口并自动进行分布式计算。通过MaxCompute的海量计算资源,企业可以进行大规模数据处理、可视化数据分析及科学计算等任务。本文将详细介绍如何开通MaxCompute和DataWorks服务,并使用MaxFrame进行数据操作。包括创建项目、绑定数据源、编写PyODPS 3节点代码以及执行SQL查询等内容。最后,针对使用过程中遇到的问题提出反馈建议,帮助用户更好地理解和使用MaxFrame。
|
2月前
|
SQL 人工智能 自然语言处理
DataWorks年度发布:智能化湖仓一体数据开发与治理平台的演进
阿里云在过去15年中持续为268集团提供数据服务,积累了丰富的实践经验,并连续三年在IDC中国数据治理市场份额中排名第一。新一代智能数据开发平台DateWorks推出了全新的DateStudio IDE,支持湖仓一体化开发,新增Flink计算引擎和全面适配locs,优化工作流程系统和数据目录管理。同时,阿里云正式推出个人开发环境模式和个人Notebook,提升开发者体验和效率。此外,DateWorks Copilot通过自然语言生成SQL、代码补全等功能,显著提升了数据开发与分析的效率,已累计帮助开发者生成超过3200万行代码。
|
2月前
|
分布式计算 DataWorks 搜索推荐
DataWorks产品评测:大数据开发治理平台的最佳实践与体验
DataWorks是阿里云推出的一款大数据开发治理平台,集成了多种大数据引擎,支持数据集成、开发、分析和任务调度。本文通过用户画像分析的最佳实践,评测了DataWorks的功能和使用体验,并提出了优化建议。通过实践,DataWorks在数据整合、清洗及可视化方面表现出色,适合企业高效管理和分析数据。
138 0
|
2月前
|
SQL DataWorks 数据可视化
阿里云DataWorks评测:大数据开发治理平台的卓越表现
阿里云DataWorks是一款集数据集成、开发、分析与管理于一体的大数据平台,支持多种数据源无缝整合,提供可视化ETL工具和灵活的任务调度机制。其内置的安全体系和丰富的插件生态,确保了数据处理的高效性和安全性。通过实际测试,DataWorks展现了强大的计算能力和稳定性,适用于中小企业快速搭建稳定高效的BI系统。未来,DataWorks将继续优化功能,降低使用门槛,并推出更多灵活的定价方案,助力企业实现数据价值最大化。
|
2月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
116 2
|
2月前
|
分布式计算 DataWorks 搜索推荐
聊聊DataWorks这个大数据开发治理平台
聊聊DataWorks这个大数据开发治理平台
125 2

热门文章

最新文章

推荐镜像

更多